了解 NPM 收缩包装

Ric*_*wis 5 node.js npm 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="
    }
  }
},
Run Code Online (Sandbox Code Playgroud)

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

  "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
    }
  }
},
Run Code Online (Sandbox Code Playgroud)

但是,当我运行npm shrinkwrapnpm install所有这些都恢复到原来的

我该如何管理这个?收缩包装是正确的选择还是我试图用它做我根本做不到的事情?

谢谢

Raj*_*kar 6

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

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

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

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

  • 感谢您回答 Raja,但是我的问题是在我编辑了 `npm-shrinkwrap.json` 并提交后,运行 `npm install` 覆盖了它 (3认同)
  • @Richlewis 接受的答案似乎没有回答你的问题。 (3认同)
  • @RajaSekar 我认为“当有人调用 npm install 时,它将安装 npm-shrinkwrap.json 中的软件包,并且您将在所有计算机上拥有相同的环境”的目的。是 `package-lock.json` “npm-shrinkwrap.json”和“package-lock.json”之间有什么区别? (2认同)