如何强制排除 NPM 的嵌套依赖项?

Posted

技术标签:

【中文标题】如何强制排除 NPM 的嵌套依赖项?【英文标题】:How can I forcibly exclude a nested dependency for NPM? 【发布时间】:2016-08-13 23:30:09 【问题描述】:

我正在使用node 0.10.xnpm 2.15.0,我想强制排除最终安装的嵌套依赖项。

到目前为止,我已尝试创建 npm-shrinkwrap.json 并手动对其进行编辑以删除嵌套依赖项,但在运行 rm -rf node_modules && npm install 之后...我仍然可以看到正在构建的嵌套依赖项:

kerberos@0.0.19 install /.../node_modules/loopback-connector-mongodb/node_modules/mongodb/node_modules/kerberos
(node-gyp rebuild) || (exit 0)
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
CXX(target) Release/obj.target/kerberos/lib/worker.o
CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
CC(target) Release/obj.target/kerberos/lib/base64.o
CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
SOLINK_MODULE(target) Release/kerberos.node

【问题讨论】:

相关:npm install --no-optional,见unix.stackexchange.com/a/256960/17823 【参考方案1】:

NPM 团队提供了一些建议,这些建议也可能对此类情况有所帮助。看: https://blog.npmjs.org/post/145724408060/dealing-with-problematic-dependencies-in-a

他们的建议本质上是分支或分叉那些引入你不想要的依赖的依赖。从您的代码 sn-p 中,我认为您想分叉 mongodb 模块并删除对 kerberos 的依赖并更新 loopback-connector-mongodb 以使用您的 mongodb 分叉。

在分叉依赖项时,这个类似问题的答案可能会有所帮助: https://***.com/a/35349284/1524989

也可以用一个虚拟包代替您要删除的包。为此,请创建一个新包(例如 npm init kerberos )并更新 package-lock.json(或 npm-shrinkwrap.json,如果您愿意)以将其替换为真正的 kerberos 包。

【讨论】:

以上是关于如何强制排除 NPM 的嵌套依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

强制依赖使用特定的子依赖版本

Gradle - 排除嵌套的传递依赖

强制 npm 在多台机器上安装相同的依赖项

如何覆盖嵌套的 NPM 依赖版本?

如何排除依赖项被 Spring Boot 的依赖项管理插件固定?

如何用不同的包完全覆盖嵌套的 npm 子依赖项(不仅仅是不同的包版本号)?