【问题标题】:How to prevent npm install <package> --save-dev from reordering devDependencies如何防止 npm install <package> --save-dev 重新排序 devDependencies
【发布时间】:2014-11-15 01:03:21
【问题描述】:

背景
当节点模块文件夹中包含路径超过 260 个字符的项目时,我们遇到了 Windows 构建系统遇到文件路径太长错误的问题。

我们发现在 devDependencies 部分的顶部添加一个深度嵌套的依赖项可以解决这个问题。假设是当 npm 看到嵌套的 dependency C.1 require package A,它已经在 devDependencies 中声明并可用时,npm 不会将 dependency A 添加到 dependency C.1 的 node_modules 目录中。

问题
我在本地机器上看到的问题是运行npm install &lt;package&gt; --save-dev 按字母顺序重新排序 devDependencies 中的包,但 npm 进程包的顺序及其依赖关系很重要。如果我签入,那么构建系统将遇到相同的文件路径太长的错误。

即如果package A出现在package C之后并且dependency C.1需要package A,那么npm会将package A添加到dependency C.1的node_modules文件夹中。

我不确定这种重新排序是否仅在我的机器上,因为我之前没有在我的家用机器上看到 npm 重新排序依赖项。

有没有人见过这种情况或知道如何制止这种行为?

版本
节点:v0.10.32
NPM:v1.4.28

旁注:我读过 npm 2.0 或以后的版本会分析依赖层次,找到重复的包,并且只在文件系统上引用它们一次,但是升级到 npm 2.0 目前不在图片中.

【问题讨论】:

  • npm shrinkwrap 有同样的缺陷。
  • @Funkodebat 您是否注意到这是最近的更改?我记得以前看到 npm 只是附加到列表的底部。
  • 实际上它可能不存在于 npm nemore 中,我有一段时间的旧版本。我最终创建了一个脚本,该脚本仅在检测到 package.json 更改时才调用 npm shrinkwrap,否则它会不断提交收缩包装,因为它会不断重新生成

标签: node.js npm


【解决方案1】:

我看到这个工作的唯一方法是拥有某种预安装脚本,[希望] 将运行 依赖文件已更新但 之前 包是安装。 From the npm site:

在当前版本的节点中,执行此操作的标准方法是使用 .gyp 文件。如果您的根目录中有一个扩展名为 .gyp 的文件 你的包,然后 npm 将运行适当的 node-gyp 命令 在安装时自动

如果这不起作用,您将需要使用 MakeFile 并重写 package.json 文件。这并不是太不寻常,因为某些项目需要某种预编译 - 您只需指示您的团队运行单独的命令来安装 npm 包。

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 2013-10-08
    • 2021-11-11
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2015-07-16
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多