我在这里发布一个解决方案。它没有解释如何收缩包装符号链接,但我找到了一种更好的解决方法,可以一次开发多个模块,这些模块之间存在依赖关系。
解决方案是在开发过程中使用替代方法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-common
到C:\DEV\workspace\connexme\node_modules\js-common
. 这样,当我npm shrinkwrap
的项目连接时,我不会从文件夹中得到无关的坏文件js-common
夹。
关于编辑DSynchronize配置DSynchronize.ini
的最后三件事:
- 使用或关闭它将保存配置,
DSynchronize.ini
因此在编辑DSynchronize.ini
和关闭它时要小心。它将覆盖DSynchronize.ini
.
- 确保每个变量都是唯一的。示例:
Source0000
, Source0001
...
- 确保每个源/目标都存在所有变量(参见上面的示例)。