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

时间:2014-11-14 16:45:50

标签: node.js npm

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

我们发现在devDependencies部分的顶部添加一个深度嵌套的依赖项可以解决这个问题。假设当npm看到嵌套的dependency C.1需要package A,它已经在devDependencies中声明并可用,npm不会将dependency A添加到dependency C.1&#39; s 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不在图片中这一次。

1 个答案:

答案 0 :(得分:0)

我看到这个工作的唯一方法是使用某种预安装脚本,希望在依赖项文件更新之后运行之前包是安装。 From the npm site

  

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

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