web-dev-qa-db-ja.com

Angular CLI ...でng-buildからモジュールを除外します...機能しません

Angular 2つのアプリを含むCLIプロジェクトがあります。両方のアプリは同じですが、1つのアプリにビルド内のすべてのファイルが含まれ、もう1つのアプリはモジュールを除外する必要があります。

Angular CLIバージョン:1.7.4 Angularバージョン:5.2.10

Angular-cli.jsonファイルに2つのアプリを追加しました。それぞれに個別のts-configファイルがあります。

  "apps": [
    {
      "name": "app",   <---- first app
      "root": "src",
      "outDir": "/wwwroot",
      "assets": [
        "assets",
        "favicon.ico"
      ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.app.json",       <----first TS config
      "testTsconfig": "tsconfig.spec.json",
      "prefix": "app",
      "styles": [
        "styles.scss"
      ],
      "scripts": [],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    },
    {
      "name": "admin",   <---- second app
      "root": "src",
      "outDir": "/wwwroot",
      "assets": [
        "assets",
        "favicon.ico"
      ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.admin.json", <----- second ts config
      "testTsconfig": "tsconfig.spec.json",
      "prefix": "app",
      "styles": [
        "styles.scss"
      ],
      "scripts": [],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],

「admin」アプリにはすべてのファイルが含まれます。ただし、アプリ配列の最初のアプリ「app」は管理モジュールを除外します。

Tsconfig.app.json:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts",
    "app/modules/admin/"    <----- note: I want this entire directory excluded from the build. 
  ]
}

Package.jsonファイルに2つの「ng-build」スクリプトを設定しました。

package.jsonビルドスクリプト:

"scripts": {
    "build-app": "ng build -app app --prod",
    "build-admin": "ng build -app admin  --prod",
  },

これをテストするために、adminモジュールのテキストとスタイルを変更し、ビルドをローカルで実行しました。アプリの管理バージョン(すべてのファイルをビルドする必要があります)は機能しますが、「アプリ」バージョンのアプリでは管理モジュールが除外されていません。

上記のスニペットで見逃されている/見落とされているものを誰かが見ていますか?誰かが同様の問題を抱えており、解決策を見つけましたか?

Angular-cliリポジトリはこの問題を解決しましたが、修正は提供していません。 ここの問題を参照

誰かがこれを読んでいて答えを探している場合:

TSは、tsconfig.jsonの「exclude」プロパティにあるかどうかに関係なく、「import」ステートメントが表示されるファイルを構築します。

App.modules.tsファイルにimportステートメントがあり、それを削除すると...ビルドから正常に除外されました。

一部のモジュールを除外するには、angularルーターを使用します。最初に、使用するすべてのレイジーロードされたモジュールを環境ファイルで宣言します。

routes: [
    { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
    {
      path: 'administration',
      loadChildren: 'app/modules/administration/administration.module#AdministrationModule'
    },
    {
      path: 'clients',
      loadChildren: 'app/modules/clients/clients.module#ClientsModule'
    },
    {
      path: 'news',
      loadChildren: 'app/modules/news/news.module#NewsModule'
    }
}]

その後、ルーターに注入するだけです。

const globalRoutes: Routes = [
  {
    path: '**',
    component: NotfoundComponent
  }
];

@NgModule({
  imports: [RouterModule.forRoot([...environment.routes, ...globalRoutes])],
  exports: [RouterModule]
})
export class AppRouting {}

そして、あなたが言ったように、魔女を管理することができますangular angular cli。

0

私のアプリケーションでは、いくつかのモジュール/サービスを含む2つのモジュールがあるためエラーが発生しました... 1つはテスト専用でした(HttpClientModuleの代わりにHttpClientTestingModuleを使用)。それはtesting/index.tsファイルにあったので、ビルド時に自動的にロードされ、すべてが失敗していました。それが必要な* .spec.tsファイルだけに含まれていたとしても。私はsrc/tsconfig.app.jsonでそれを除外しようとしました、そしてそれはうまくいきました:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": []
  },
  "exclude": [
    "test.ts",
    "app/indalo-api/testing/*",
    "**/*.spec.ts"
  ]
}

Angular 6以上の場合、除外にあるものを除くすべての.tsファイルが自動的に読み込まれますが、除外されていないものが必要な場合は読み込まれます。

意味あり。

0
shamox