我有一个项目,其中几个前端共享一个公共库。
这些项目的模块依赖项由 npm 管理。
因此,在我拥有的每个项目的 package.json 中:
"dependencies": {
"mylib": "file:../<...path...>/mylib",
...other deps...
},
我使用“mylib”有两个目的:
- 分享一些课程;
- 共享共同的依赖关系(主要是角度)
到目前为止,我使用的是 npm 3.3.12,并且在运行之后npm install
,mylib 的角度依赖项位于我的顶级项目的 node_modules 目录下。
所以,我有例如
node_modules
@angular
core
common
....
mylib
现在,使用 npm 5.4.2,我有:
node_modules
mylib
node_modules
@angular
core
common
这在我的构建过程中导致了很多问题。它需要额外配置打字稿,通过添加如下指令:
"baseUrl": "",
"paths": {
"@angular/common": ["node_modules/mylib/node_modules/@angular/common/"],
"@angular/core": ["node_modules/mylib/node_modules/@angular/core/"],
"@angular/compiler": ["node_modules/mylib/node_modules/@angular/compiler/"],
"@angular/compiler-cli": ["node_modules/mylib/node_modules/@angular/compiler-cli/"],
"@angular/forms": ["node_modules/mylib/node_modules/@angular/forms/"],
"@angular/http": ["node_modules/mylib/node_modules/@angular/http/"],
"@angular/platform-browser": ["node_modules/mylib/node_modules/@angular/platform-browser/"],
"@angular/platform-browser/animations": ["node_modules/mylib/node_modules/@angular/platform-browser/animations/"],
"@angular/platform-browser-dynamic": ["node_modules/mylib/node_modules/@angular/platform-browser-dynamic/"],
"@angular/router": ["node_modules/mylib/node_modules/@angular/router/"],
"primeng/primeng": ["node_modules/mylib/node_modules/primeng/primeng"],
"rxjs/Rx": ["node_modules/mylib/node_modules/rxjs/Rx"]
}
在 tsconfig.json
当您必须对 AOT、汇总等进行类似配置时,这变得非常烦人......
我尝试使用 npm dedupe 来简化这一点。由于项目有很多依赖项,因此仅其中一个项目就需要超过 1000 万个:
npm dedupe
...
...
removed 824 packages and moved 1020 packages in 623.196s
有没有一种标准的、有效的方法可以像以前一样扁平化依赖关系?npm dedupe 可以完成这项工作,但需要花费大量时间,因此它不是一个可接受的替代方案。