如何防止npm install <package> --save-dev重新排序devDependencies

3
背景 当node_modules文件夹中的某些项的路径超过260个字符时,Windows构建系统会出现文件路径过长错误。
我们发现在devDependencies部分的顶部添加一个深度嵌套的依赖项可以解决这个问题。假设当npm看到一个嵌套的依赖C.1需要已经声明并在devDependencies中可用的包A时,npm不会将依赖项A添加到依赖项C.1的node_modules目录中。
问题 我在本地机器上遇到的问题是,在运行npm install --save-dev命令时,npm会按字母表顺序重新排列devDependencies中的软件包,但npm处理软件包及其依赖关系的顺序很重要。如果我提交这个更改,那么构建系统将遇到相同的文件路径过长错误。
例如,如果软件包A在软件包C之后,并且依赖项C.1需要软件包A,则npm将把软件包A添加到依赖项C.1的node_modules文件夹中。
我不确定这种重新排序是否只在我的电脑上发生,因为我以前从未看到npm重新排序依赖项。
版本 Node:v0.10.32 NPM:v1.4.28
另外注意:我已经阅读了npm 2.0或未来版本将分析依赖层次结构,找到重复的软件包,并仅在文件系统上引用它们一次,但是目前不考虑升级到npm 2.0。

“npm shrinkwrap” 也有同样的缺陷。 - dansch
@Funkodebat 你有没有注意到这是最近的变化吗?我记得以前npm只是在列表底部追加。 - Jerry
实际上它可能不再存在于npm中了,我有一个旧版本用了一段时间。最终,我创建了一个脚本,仅在检测到package.json更改时调用npm shrinkwrap,否则它会不断提交shrinkwrap,因为它一直在重新生成。 - dansch
1个回答

0
我唯一看到这个工作的方法是有一些预安装脚本,[希望]在依赖文件更新后但在包安装之前运行。从npm网站

在当前版本的node中,标准的做法是使用.gyp文件。如果您的包根目录下有一个扩展名为.gyp的文件,则npm将自动在安装时运行适当的node-gyp命令。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接