3

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

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

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

{xxxx}是一个对 npm 来说似乎无关紧要的开发依赖项。

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

注意:

  • npm 3.10.3
  • 节点 6.3.0
4

1 回答 1

0

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

解决方案是在开发过程中使用替代方法npm link来处理模块关系:不是将文件夹A链接到另一个文件夹B(又名符号链接),而是将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-commonC:\DEV\workspace\connexme\node_modules\js-common. 这样,当我npm shrinkwrap的项目连接时,我不会从文件夹中得到无关的坏文件js-common夹。

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

  • 使用或关闭它将保存配置,DSynchronize.ini因此在编辑DSynchronize.ini和关闭它时要小心。它将覆盖DSynchronize.ini.
  • 确保每个变量都是唯一的。示例:Source0000, Source0001...
  • 确保每个源/目标都存在所有变量(参见上面的示例)。
于 2017-02-20T09:00:47.333 回答