gpt4 book ai didi

angular - 如何强制 npm 扁平化依赖关系?

转载 作者:太空狗 更新时间:2023-10-29 17:35:36 25 4
gpt4 key购买 nike

我有一个项目,其中多个前端共享一个公共(public)库。

这些项目的模块依赖关系由 npm 管理。

因此,在我拥有的每个项目的 package.json 中:

  "dependencies": {
"mylib": "file:../<...path...>/mylib",
...other deps...
},

我使用“mylib”有两个目的:

  • 分享一些类(class);
  • 共享共同的依赖项(主要是 Angular 依赖项)

到目前为止,我一直在使用 npm 3.3.12,在运行 npm install 之后,mylib 的 Angular 依赖项就在我的顶级项目的 node_modules 目录下。

所以,例如,我有

node_modules
@angular
core
common
....
mylib

现在,使用 npm 5.4.2,我有:

node_modules
mylib
node_modules
@angular
core
common

这在我的构建过程中导致了很多问题。它需要通过添加指令来额外配置 typescript ,例如:

"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、rollup 等做类似的配置时,这真的很烦人......

我尝试使用 npm dedupe 来简化它。由于项目有很多依赖项,仅其中一个项目就需要超过 1000 万:

npm dedupe
...
...
removed 824 packages and moved 1020 packages in 623.196s

是否有一种标准的、高效的方法可以像以前一样扁平化相同类型的依赖关系? npm dedupe 可以完成这项工作,但需要花费太多时间,因此它不是一个可接受的替代方案。

最佳答案

作为 npm 的替代方案,您可能希望切换到使用 yarn。默认情况下应该对模块进行重复数据删除。首先删除现有的 node_modules 文件夹,然后执行 yarn install

您也可以强制 yarn 进行平面安装 (yarn install --flat),但在这种情况下,仅进行平面安装就足够了。

yarn.lock 文件添加到版本控制,然后任何其他 checkout 将被锁定到相同的模块版本(除非他们进行 yarn upgrade)。

关于angular - 如何强制 npm 扁平化依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com