NPM 如何更新/升级传递依赖?

gau*_*430 6 node.js npm express

我在我的节点服务器中使用 express v4.16.4。

它引入了 cookie 签名 v1.0.6。

我想将 cookie-signature 升级到 v1.1.0,因为它有一个我需要的修复程序。有什么方法可以做到这一点?

我不认为我应该执行 npm install cookie-signature@1.1.0 ,因为它会在我的应用程序依赖项中列出 cookie-signature。

编辑:讨论了我希望解决的完全相同的问题。接受的答案是使用 npm-shrinkwrap ,另一个投票最高的答案是使用 package-lock.json ,但这两个似乎都有各自评论中讨论的问题。

很高兴将其作为副本关闭。

小智 16

NPM 8 引入了“覆盖”,它允许您覆盖直接依赖项的特定传递依赖项。对于您的用例,您可以在 package.json 中声明如下所示的内容。

{
  "overrides": {
    "express": {
      "cookie-signature": "1.1.0"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更多详细信息@ https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides


小智 7

您也可以通过resolutionspackage.json“强制”某些版本的依赖项中添加一个键来解决该问题:

{
  "resolutions": {
    "cookie-signature": "^1.1.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

要实际使用它,您必须使用npm-force-resolutionsin preinstall

"scripts": {
  "preinstall": "npx npm-force-resolutions"
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此帖子:https : //itnext.io/fixing-security-vulnerabilities-in-npm-dependencies-in-less-than-3-mins-a53af735261d


小智 1

我们有一个非常相似的问题。Protractor 5.4.2 依赖于 webdriver-manager@^12.0.6。在 package-lock.json 中,webdriver-manager 已修复为 12.1.5。但是,我们需要 12.1.7 才能使其与所有最新的 chrome 版本兼容。

我们注意到,npm 在删除 node_modules 和 package-lock.json 时会安装版本 12.1.7,但我们没有找到自动更新 package-lock.json 的方法。因此,我们采取了以下步骤:

  1. 删除node_modules
  2. 删除 package-lock.json
  3. 跑步npm install
  4. 打开 package-lock.json 并将 webdriver-manager 部分复制到另一个文件
  5. 撤消 (git checkout) package-lock.json 中的所有更改
  6. 将保存的 webdriver-manager 部分复制回 package-lock.json
  7. 删除node_modules
  8. 跑步npm install
  9. 检查 node_modules/protractor/node_modules/webdriver-manager/package.json 是否安装了正确的版本。

我认为这个解决方法也应该适用于 Express 和 cookies-signature。

  • @montrealist 步骤 3 将新版本(可能还有其他模块)写入 `package-lock.json`,在步骤 6 中,您可以从步骤 4 中创建的备份中手动更改它。但是,我认为您可以跳过步骤 4 来8 如果您仅在步骤 1 中从“node_modules”中删除“webdriver-manager”(及其依赖项,如果您还需要新版本)。在步骤 3 中,npm 应该只将 _removed_ 依赖项的新版本写入新生成的包-lock.json(检查未暂存的更改)。至少在我的例子中是这样的。 (2认同)