我一次在两个存储库上工作。一个依赖于另一个(在package.json
依赖关系中列出)。
所以我在npm link ..\theOne
中使用other
来同时处理这两个模块。因此,我可以在另一个模块上测试修改。问题是在npm shrinkwrap
模块上执行other
时:它会产生如下错误:
npm ERR! extraneous C:\other\node_modules\theOne\node_modules\{xxxx}
{xxxx}
是一个dev依赖项,对于npm来说显得无关紧要。
任何人都成功将带有符号链接的模块收缩到另一个模块?
NB:
答案 0 :(得分:0)
我在这里发布了一个解决方案。它没有解释如何收缩包装符号链接,但我找到了一个更好的解决方法,一次开发多个模块与这些模块之间的依赖关系。
解决方案是使用npm link
的替代方法来处理开发期间的模块关系:而不是将文件夹 A 链接到另一个文件夹 B ( aka symlink),解决方案是将 B 中修改过的文件复制到文件夹 A 中。此解决方案非常强大,因为它避免了由于来自 B 的不需要的模块而导致节点模块收缩包装错误。怎么做:
您可以使用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
。Source0000
,Source0001
...