以前は Angular CLI 1.2.8 で実行されていた Angular 5 アプリがあり、すべてがうまく機能していました。NullInjectorError: No provider for Http!
1.3 へのアップグレード後 (1.5.4 への途中)、 localhost:4200 にアクセスしたときに使用している外部 npm リンク ライブラリに問題があるようです。
HttpModule を shared-lib モジュールに追加すると、エラーはなくなりますが、追加のプロバイダー エラーが発生します。shared-lib モジュールではなく、以前と同じように、shared-lib がメイン アプリのモジュールを使用することを期待しています。この例では、shared-lib には HttpModule に依存する angular サービスがありますが、shard-lib は HttpModule をインポートしません。私が使用しているメイン プロジェクトは、HttpModule をインポートします。
私のtsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"types": [ "node", "jasmine" ],
"lib": [
"es2016",
"dom"
],
"paths": {
"rxjs/*": [
"node_modules/rxjs/*"
],
"@angular/*": [
"node_modules/@angular/*"
]
}
}
}
私の tsconfig.app.json:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "",
"types": []
},
"include": [
"./**/*.ts",
"../node_modules/shared-lib/src/**/*.ts",
"../node_modules/shared-lib/index.ts",
"../node_modules/shared-lib/shared-lib.ts"
],
"exclude": [
"test.ts",
"**/*.spec.ts",
"../node_modules/shared-lib/**/*.spec.ts"
],
"typeRoots": [
"node_modules/@types"
],
"types": [ "node" ]
}
更新:共有ライブラリ node_modules の @angular フォルダーを削除した後、プロジェクトが機能することがわかりました。tsconfig.json 内のオブジェクトのパスが、Angular の使用をプロジェクトの node_modules のみにオーバーライドしない理由がわかりません。