npm link会移除子依赖项。

17

我想在本地开发一个NPM软件包,并在依赖于它的软件包中对其进行测试。 我正在使用 NPM(7.5.3),具体使用 npm link 命令,但是在依赖链中遇到了问题。

子软件包有依赖关系,在使用 npm install "git+https://github.com/name/child_package" 命令安装时,这些依赖项都会添加到父级 node_modules 文件夹中。 但是当我使用 npm link 命令连接该模块时:

cd child_package
npm link
cd ../parent_package
npm link child_package

在最后执行的命令(npm link child_package)中,所有在parent_packagenode_modules中的child_package依赖都被移除了。NPM 报告:

在 1 秒钟内删除了 60 个包,更改了 1 个包,并审核了 231 个包

此时,由于缺少这些依赖项,父级项目中的所有编译都会失败。它可以找到预期的符号链接的child_package,但是在child_package中定义的依赖项“gsap”现在已被删除。

如果我使用 npm install "git+https://github.com/name/child_package" 重新安装,它将把依赖项添加回父项目的node_modules文件夹中。


6
我也遇到了同样的问题,这太烦人了。 - Michael Liu
如果你还没有使用过,可以尝试一下 Lerna https://github.com/lerna/lerna。它可以让你轻松地引导包 - 例如安装子包的依赖项,然后再安装父包的依赖项。如果子包也在本地可用,那么你只需要运行 npm link 即可,而不会影响任何人的依赖项。 - jeeves
2个回答

2

这是 npm V7 中引入的一种行为+

我找到的唯一合理的“解决方法”是返回到 npm 6(npm install -g npm@6)。

另一个“解决方法”是 npm install --no-save ../../my-local-module,但要反映本地模块的更改,您需要从 node_modules 中删除它并重新安装。有点无聊....


1
尝试按照以下步骤进行:
cd child_package
npm install

这将安装子依赖项到子包目录中。
个人而言,我不喜欢npm link,总是使用npm publish(使用类似于1.0.0-preview.1的版本号为您的子包,并在完成后删除“-preview.Number”)。

1
尝试过这个,但不起作用。当我尝试运行主项目(我将该包链接到其中)时,它仍然抱怨缺少依赖项。使用link的目标是在子包上进行开发,所以我不确定发布是否比链接更好的选择? - meeech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接