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。
私のアプリケーションでは、いくつかのモジュール/サービスを含む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ファイルが自動的に読み込まれますが、除外されていないものが必要な場合は読み込まれます。
意味あり。