【问题标题】:NPM node_modules structure changes every other time I run "npm install"每隔一次我运行“npm install”时,NPM node_modules 结构就会发生变化
【发布时间】:2018-01-09 19:30:31
【问题描述】:

我在 Github 中有两个带有 package.json 的私有存储库,其中一个存储库是另一个存储库的依赖项。像这样

Repo_A
   |
   |__ Reop_B
    

在 Repo_A 的 package.json 中我有:

dependencies: {
   "Repo_B": "GithubUser/Repo_B"
}

我想在我的项目中使用 Repo_A,所以我运行:

npm install GithubUser/Repo_A --save

此命令将同时安装 Repo_A 和 Repo_B 但问题是 Repo_A 和 Repo_B 嵌套在我的主项目的 node_molules 文件夹中(而不是平面)。

node_modules
           |
           |_Repo_A
                  |
                  |_ node_modules
                                |
                                |_Repo_B

在运行npm install agian Repo_A 和 Repo_B 之后,这次node_mudules 将变平!

node_molules
           |
           |_Repo_A
           |
           |_Reop_B

再次运行 npm install 会使 Repo_A 和 Repo_B 再次嵌套! 这个事件在我运行npm install时重复一次 你有什么建议吗?

更新

我的问题不是嵌套或平面依赖!我的问题是每次我运行npm install 我都会在平面和嵌套之间切换!

【问题讨论】:

标签: node.js npm node-modules


【解决方案1】:

确实,我以前也遇到过这个问题。 现在我在安装后使用npm dedupe 以确保依赖关系树尽可能平坦。

请注意dedupe doesn't always dedupe

【讨论】:

    【解决方案2】:

    这可能会令人不安,这就是 npmjs 发布完整指南的原因,其中解释了它们如何存储依赖项。

    https://docs.npmjs.com/how-npm-works/npm3

    但是,由于 B v1.0 已经是顶级的 dep,我们不能将 B v2.0 安装为顶级依赖项。 npm v3 通过默认为 npm v2 行为并将新的、不同的模块 B 版本依赖项嵌套在需要它的模块下(在本例中为模块 C)来处理此问题。

    玩得开心

    【讨论】:

    • 每个 repo 只有一个版本。我没有不同的版本!
    • 也许是你,但是你的依赖呢?以及你的依赖的依赖关系... npm 尽量扁平化。
    • 这就是为什么当我安装一个新包时,我会完全删除 node_modules 并重新安装所有东西
    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多