为什么" npm安装"覆盖现有符号链接中的节点模块?

时间:2016-07-11 17:10:19

标签: node.js npm symlink npm-install

我正在使用javascript / Node / React模块。我发展:

  • 1个模块 A 具有共同功能
  • 其他模块 B ,C,D ......依赖于A。

我需要能够同时在 A B 上进行开发。这就是为什么在 B 中执行npm install后,我创建了一个符号链接,从 B A {{1 }}。然后,我可以从 A 启动webpack dev服务器, B 的webpack dev服务器,因此,对 A 的任何修改都会影响即可。这种方式对我来说都很好。

我的问题是,如果我从 B 启动命令npm link ../A,它会将符号链接保留为 A ,并从 A中删除多个节点模块存储库。我不知道为什么?我想保留现有的符号链接 A ,并在重新安装时让B忽略它。

我的第一个解决方案是在安装后填写npm脚本&在安装 B 节点模块之前预先安装以执行npm install符号链接,然后重新生成符号链接。但对于那些没有在 A 上工作并且不需要任何符号链接的开发人员而言,这是一个问题......

我只是将npm从2更新为3,但我没有找到rimraf如何与现有符号链接进行交互的任何答案。

我正在使用:

  • npm 3.10.3
  • node 6.3.0

感谢任何有用的想法或链接

1 个答案:

答案 0 :(得分:0)

我终于明白了附加测试的内容。我所描述的行为似乎来自' shrinkwrap.json'方法。无论在 A 文件夹中附加什么内容,如果我安装(npm install B B 中的现有shrinkwrap.json,遵循shrinkwrap规则。

就我而言, A 中加载了dev依赖项。这些dev依赖项未列在 B shrinkwrap.json中。因此,重新安装 B 时会更改 A

我可以产生反问题:如果我在 B 中安装 A 并执行npm shrinkwrap,我会遇到很多错误,例如&#34 ; npm ERR! extraneous:"

似乎没有dev依赖关系的锁定依赖关系可能不适合将npm符号链接安装到开发模式中安装的文件夹' - 又安装了dev依赖项。