【发布时间】: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 <package> --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,否则它会不断提交收缩包装,因为它会不断重新生成