如何缩小使用'npm link'创build的符号链接节点模块?

我一次在两个仓库工作。 一个依赖于另一个(在package.json依赖项中列出)。

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

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

{xxxx}是对npm显示为无关的dev依赖关系。

任何人都已经成功地用一个符号链接来压缩一个模块到另一个模块?

注意:

  • npm 3.10.3
  • 节点6.3.0

我在这里发布解决scheme。 它没有解释如何缩小符号链接,但我发现一个更好的解决方法来一次开发多个模块与这些模块之间的依赖关系。

解决方法是在开发过程中使用npm link替代处理模块关系:解决方法是将文件夹BA复制到另一个文件夹B (也称为符号链接)。 这个解决scheme非常强大,因为它避免了由于来自B的不需要的模块而导致节点模块收缩包装错误。 怎么做:

在Mac上

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

在窗口

我使用DSynchronize (点击此链接后,向下滚动查看可执行文件)。 DSynchronize是一个独立的实用程序,可让您定期同步两个或多个文件夹。 您可以排除复制某些文件夹(如node_modules )或包括其他文件(如lib )。 configuration文件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 

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

关于为DSynchronizeconfiguration编辑DSynchronize.ini最后三件事情:

  • 使用它或closures它将保存DSynchronize.ini的configuration,因此在编辑DSynchronize.ini并closures它时要小心。 它将覆盖DSynchronize.ini
  • 确保每个variables都是唯一的。 例如: Source0000Source0001
  • 确保每个Source / Destinations都具有所有variables(请参阅上面的示例)。