2014-11-14 32 views
2

背景
我们遇到的问题与Windows构建系统碰到文件路径当节点模块文件夹有有在其内物品太长错误路径超过260个字符。如何防止NPM从重新排序devDependencies安装<package> --save-dev的

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

问题
我看到我的本地机器上的问题是,运行在npm install <package> --save-dev重新排序devDependencies包按字母顺序,但为了NPM工艺包及其依赖的问题。如果我检查了这一点,那么构建系统会遇到相同的文件路径太长的错误。

即如果package Apackage Cdependency C.1需要package A后,再故宫将增加package Adependency C.1的node_modules文件夹。

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

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

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

附注:我读过,NPM 2.0或未来版本将分析依赖性的层次结构,找到重复的包,并且只在文件系统上引用它们一次,但此时不会升级到npm 2.0。

+0

'npm shrinkwrap'有同样的缺陷。 – Funkodebat 2014-11-14 16:53:27

+0

@Funkodebat你注意到这是否是最近的变化?我记得看到npm只是追加到列表的底部。 – Jerry 2014-11-14 17:02:51

+0

实际上它可能不存在于npm nemore,我有一段时间的旧版本。我最终创建了一个脚本,只要它检测到'package就会调用'npm shrinkwrap'。json“发生了变化,否则它会不断提交shrinkwrap,因为它不断重新生成 – Funkodebat 2014-11-14 17:05:17

回答

0

我看到这个工作的唯一方法是有某种前脚本的其中[希望]将依赖文件已被更新,但已安装该软件包前后运行From the npm site

在节点的当前版本,这样做的标准方法是使用 .gyp文件。如果你有在 你的包的根.gyp扩展名的文件,然后NPM将运行适当的节点GYP在安装时

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

相关问题