我正在使用 node 0.10.x
和 npm 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 >= 8.3.0
使用 overrides较新版本的 npm 的功能现在可以通过将其替换为本地文件系统的链接来防止安装依赖项的依赖项。这有点 hack,但它适用于 Unix 和 Windows。
首先,请确保您使用的是 npm 8.3.0 或更高版本。在命令行中输入:
npm -v
查看安装的 npm 版本。
现在,看看问题中的示例,假设您的一个依赖项安装了旧版本的 mongodb
而它又在您的 node_modules 文件夹中安装了 kerberos
.
你不使用 kerberos
并且你不希望通过 npm install
安装它,所以编辑 “overrides”
你的 package.json 文件的部分是这样的:
package.json
{
...
"overrides": {
"kerberos": "../_EXCLUDED_"
},
...
}
确保在此更改后再次运行 npm install
。这将创建一个符号链接(symbolic link) (Unix) 或一个联结 (Windows):
node_modules/mongodb/node_modules/kerberos
->
node_modules/mongodb/node_modules/_EXCLUDED_
符号链接(symbolic link)的目标不存在:这样,每次尝试使用require
或import
加载kerberos
都会导致容易检测到的错误:
Error: Cannot find module 'kerberos'
这将使您免于因排除所需的依赖项而导致调试错误的痛苦。
关于node.js - 如何强制排除 NPM 的嵌套依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758157/