如何使用' npm链接'?收缩包装符号链接节点模块?

时间:2016-07-12 09:00:06

标签: node.js npm symlink shrinkwrap npm-shrinkwrap

我一次在两个存储库上工作。一个依赖于另一个(在package.json依赖关系中列出)。

所以我在npm link ..\theOne中使用other来同时处理这两个模块。因此,我可以在另一个模块上测试修改。问题是在npm shrinkwrap模块上执行other时:它会产生如下错误:

npm ERR! extraneous C:\other\node_modules\theOne\node_modules\{xxxx}

{xxxx}是一个dev依赖项,对于npm来说显得无关紧要。

任何人都成功将带有符号链接的模块收缩到另一个模块?

NB:

  • npm 3.10.3
  • node 6.3.0

1 个答案:

答案 0 :(得分:0)

我在这里发布了一个解决方案。它没有解释如何收缩包装符号链接,但我找到了一个更好的解决方法,一次开发多个模块与这些模块之间的依赖关系。

解决方案是使用npm link的替代方法来处理开发期间的模块关系:而不是将文件夹 A 链接到另一个文件夹 B ( aka symlink),解决方案是将 B 中修改过的文件复制到文件夹 A 中。此解决方案非常强大,因为它避免了由于来自 B 的不需要的模块而导致节点模块收缩包装错误。怎么做:

在Mac上

您可以使用wml:Wml侦听某些文件夹中的更改(使用Watchman)并将更改的文件复制到另一个文件夹中。我从不使用它,但我的队友使用Mac每天都使用它。

在窗口

我使用DSynchronize(点击此链接后,向下滚动以查看可执行文件)。 DSynchronize是一个独立的实用程序,可让您定期同步两个或多个文件夹。您可以排除复制某些文件夹(例如node_modules)或包含其他文件夹(例如lib)。可以使用文本编辑器编辑配置文件DSynchronize.ini。例如:

Source0000=-C:\DEV\workspace\js-common
Destination0000=-C:\DEV\workspace\connexme\node_modules\js-common
Filter0000=
VolumeSerialOri0000=407325536
VolumeSerialDest0000=407325536
ExcludeFilter0000=0
NoSubDirectory0000=0
NoFilterDirectory0000=1
DateBeforeToExcludeFiles0000=00:00:00
FilterFolder0000=\.git|\.vscode|\node_modules

此配置会将文件从C:\DEV\workspace\js-common复制到C:\DEV\workspace\connexme\node_modules\js-common。这样,当我npm shrinkwrap我的项目连接时,我就不会从js-common文件夹中获取无关的坏文件夹。

关于编辑DSynchronize配置DSynchronize.ini的最后三件事:

  • 使用它或关闭它会将配置保存在DSynchronize.ini中,因此在编辑DSynchronize.ini并关闭它时要小心。它将覆盖DSynchronize.ini
  • 确保每个变量都是唯一的。示例:Source0000Source0001 ...
  • 确保为每个源/目的地提供所有变量(参见上面的示例)。