npm 链接多个本地(相互依赖)模块

Posted

技术标签:

【中文标题】npm 链接多个本地(相互依赖)模块【英文标题】:npm link multiple local (inter-dependant) modules 【发布时间】:2014-10-17 10:31:56 【问题描述】:

我有 3 个 node.js 模块,ABC。所有这些都是私人 git 存储库。 A 依赖于 B 依赖于 C。 Git 克隆 A 并执行 npm install 就像一个魅力。

但是在模块A 上编码时,我也想在B(和C)上工作。后两者也是 git 克隆的。 npm link ../pathto/B 效果很好。

由于B 依赖于Cnpm 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 是我的本地模块BC 所在的目录)。

到目前为止,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 链接多个本地(相互依赖)模块的主要内容,如果未能解决你的问题,请参考以下文章

通过 npm 链接和 typescript 本地开发的多模块

使用 npm 链接符号链接反应模块以进行本地开发会出错

Jest 无法从 npm 链接模块转换导入

Lerna bootstrap 不链接本地依赖项?

使用 npm 安装本地模块?

使用npm链接时,无法从其他模块或领域使用GraphQLSchema“[object GraphQLSchema]”