node.js - 如何强制排除 NPM 的嵌套依赖项?

标签 node.js npm

我正在使用 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 >= 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)的目标不存在:这样,每次尝试使用requireimport 加载kerberos 都会导致容易检测到的错误:

Error: Cannot find module 'kerberos'

这将使您免于因排除所需的依赖项而导致调试错误的痛苦。

关于node.js - 如何强制排除 NPM 的嵌套依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758157/

相关文章:

javascript - Node js 中的时分和秒的日期时间差异 moment.js

javascript - 如果找不到元素,appium nodejs (wd) 将挂起

node.js - 如何使用 "ng e2e"对 Node 服务器而不是 webpack-dev-server 运行 Protractor 测试

javascript - 在nodejs中获取最大调用堆栈大小超出错误

node.js - Sequelize : how to implement a search based on associated keywords?

angular - ng 新项目 - 系统找不到指定的路径

node.js - 为什么我不应该在生产模式下使用 dotenv?

node.js - 如何使用私有(private) NPM 包和云功能?

node.js - 如何将 Nodejs 包添加到 Yocto?

javascript - Node/NPM : If I upgrade my node version, 我应该重建包锁定文件吗?