npm 链接多个本地(相互依赖)模块
Posted
技术标签:
【中文标题】npm 链接多个本地(相互依赖)模块【英文标题】:npm link multiple local (inter-dependant) modules 【发布时间】:2014-10-17 10:31:56 【问题描述】:我有 3 个 node.js 模块,A
、B
和 C
。所有这些都是私人 git 存储库。 A
依赖于 B
依赖于 C
。 Git 克隆 A
并执行 npm install
就像一个魅力。
但是在模块A
上编码时,我也想在B
(和C
)上工作。后两者也是 git 克隆的。 npm link ../pathto/B
效果很好。
由于B
依赖于C
,npm link
负责将C
“安装”到B/node_modules/C
。它是一个静态文件克隆,被B
使用。
所以在执行npm link ../pathto/C
时,它会导致A/node_modules/C
(作为符号链接)。
但是,这就是问题所在,B
将使用 C
的静态克隆,而不是我链接到 A/node_modules/C
的内容。
A/
...
node_modules/
B -> B/
C -> C/
B/
...
node_modules/
C/
...
C/
...
有没有人想办法解决这个问题?
【问题讨论】:
【参考方案1】:我解决了它,或者至少我得到了它的工作。
在npm install
之后,我执行npm link _node_modules/*
(_node_modules 是我的本地模块B
和C
所在的目录)。
到目前为止,B
已按计划获得所需。但B
仍会加载其静态C
引用。
然后我只需 cd
到 _node_modules/B/node_modules
并执行 npm link C
。
【讨论】:
【参考方案2】:对我来说很简单
npm link A B C
有效。使用 npm 7.5.2
当然,包要先暴露,所以
sudo npm link
必须在每个包的目录中运行。
这确实需要package.json
的一些技巧:在安装新软件包期间,必须从需求中隐藏对本地模块的依赖(或者可能指定为路径,但我还没有足够的知识)。之后,需要再次链接本地包。它们还必须始终使用一个命令链接,否则 npm 将简单地删除丢失的命令。
2021 年 11 月 8 日更新:
我正在使用 Vue,上述解决方案导致我的构建中有多个 Vue 实例。似乎每个链接的模块都忽略了导入模块的“正常”方式,并分别进行了自己的导入。
所以现在我在库中使用 npm pack
并在使用项目作为文件依赖项时指定依赖项 "my_package_name": "file:/tmp/my_package_name-x.y.z.tgz",
【讨论】:
以上是关于npm 链接多个本地(相互依赖)模块的主要内容,如果未能解决你的问题,请参考以下文章