如何防止npm install <package> –save-dev重新sortingdevDependencies

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

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

问题
我在本地机器上看到的问题是运行npm install <package> --save-dev按字母顺序重新排列devDependencies中的软件包,但npm处理软件包及其相关性的顺序很重要。 如果我检查了这个,那么构build系统会碰到相同的文件path太长的错误。

即,如果package Apackage Cdependency C.1需要package A ,则npm将package A添加到dependency C.1的node_modules文件夹中。

我不知道这个重新sorting是否只在我的机器上,因为我之前没有看到npm重新sorting依赖关系。

有没有人看过这个或知道如何制止这种行为?

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

注意:我已经读过npm 2.0或者将来的版本会分析依赖关系层次结构,find重复的包,并且只在文件系统上引用它们,但是到目前为止,npm 2.0的升级不在图片中。

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

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

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