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

spa*_*ted 5 dependencies module node.js npm

我有3个node.js模块ABC。所有的人都私有git repos。A依赖于B依赖C。Git克隆A和执行npm install就像魅力一样。

但是,当在模块上编码时A,我也想在B(和C)上进行工作。后两个也是git clone的。并npm link ../pathto/B运作良好。

而作为B依靠Cnpm link把“安装”照顾CB/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/
    ...
Run Code Online (Sandbox Code Playgroud)

有谁有解决此问题的想法?

vel*_*lis 21

对我来说,一个简单的

npm link A B C
Run Code Online (Sandbox Code Playgroud)

作品。使用 npm 7.5.2

当然,包必须事先暴露出来,所以

sudo npm link
Run Code Online (Sandbox Code Playgroud)

必须在每个包的目录中运行。

这确实需要一些技巧package.json:在安装新软件包期间,必须隐藏对本地模块的依赖关系(或者可能指定为路径,但我对此还没有足够的知识)。之后,需要再次链接本地包。它们还必须始终使用一个命令进行链接,否则 npm 将简单地删除丢失的命令。

2021年11月8日更新:

我正在使用 Vue,上述解决方案导致我的构建中出现了多个 Vue 实例。似乎每个链接的模块都忽略了导入模块的“正常”方式,并分别进行了自己的导入。

所以现在我npm pack在库中使用并指定使用项目作为文件依赖项的依赖项"my_package_name": "file:/tmp/my_package_name-x.y.z.tgz",

  • 哇“npm link AB C”一起拯救我的日子 (2认同)

spa*_*ted 5

我解决了它,或者至少我让它工作了。

npm install在我这样做之后(_node_modules 是我的本地模块所在npm link _node_modules/*的目录)。BC

到目前为止,B已按计划满足要求。但仍然B加载其静态C引用。

然后我就简单cd_node_modules/B/node_modules执行npm link C