我有一个以前在 Angular CLI 1.2.8 上运行的 Angular 5 应用程序,一切运行良好。升级到 1.3 之后(在我升级到 1.5.4 的路上),我们正在使用的外部 npm 链接库似乎存在问题,因为我NullInjectorError: No provider for Http!
在访问 localhost:4200 时得到了一个
当我将 HttpModule 添加到 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 中。