了解 NPM shrinkwrap

Understanding NPM shrinkwrap

最近发现 npm-audit 并在第一个 运行 上标记了很多漏洞,主要是围绕包及其依赖项。

我发现 npm shrinkwrap 想要解决这些漏洞,它允许我指定应该使用哪些版本及其依赖项?反正我是这么看的(不对请指正,学习一下)

我试图修复的一个例子是模块 hoek,在我的 package.json 中它被设置为 "hoek": "^5.0.3"

当我 运行 npm shrinkwrap 其中一个依赖项 hoek 设置为版本 2

"boom": {
  "version": "2.10.1",
  "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
  "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
  "requires": {
    "hoek": "2.x.x"
  },
  "dependencies": {
    "hoek": {
      "version": "2.16.3",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
    }
  }
},

我想我可以编辑它并指定我希望依赖项使用的版本

  "boom": {
  "version": "2.10.1",
  "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
  "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
  "dev": true,
  "requires": {
    "hoek": "2.x.x"
  },
  "dependencies": {
    "hoek": {
      "version": "5.0.3",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
      "dev": true
    }
  }
},

但是当我 运行 npm shrinkwrapnpm install 所有这一切都恢复到原来的状态

我该如何管理它? shrinkwrap 是正确的选择还是我想用它来做一些我根本做不到的事情?

谢谢

NPM shrinkwrap用于锁定项目中的依赖版本

使用 npm installnpm install package-name 安装软件包并更新 node_modules 文件夹后,您应该 运行 npm shrinkwrap

它将创建新的 npm-shrinkwrap.json 文件,其中包含有关您使用的所有包的信息,您必须提交该文件。

下一次,当有人调用 npm install 时,它会从 npm-shrinkwrap.json 安装软件包,你将拥有所有机器上的相同环境。