升级npm的依赖性指南

132 阅读4分钟

image by cocoparisienne https://pixabay.com/users/cocoparisienne-127419/

我们怎样才能安全地升级项目中的npm依赖项?在依赖包的版本前面,那些有趣的^~ 字符是什么意思?我们如何对项目中的npm依赖包进行重大版本升级?我们将在这篇文章中找到答案。

版本部分

npm包的版本管理遵循语义版本管理。所以,一个包的版本有3个部分 -Major.Minor.Patch

  • 补丁:当进行了不会破坏消耗代码的错误修复时,这个会被递增。
  • 次要的:当添加了不会破坏消耗代码的功能时,它会被递增。
  • 主要的:当进行破坏性的修改时,这个值会被递增。

^~ 是什么意思?

一个版本前面通常有一个^ (例如:^16.8.6 )。这意味着最新的次要版本可以被安全地安装。因此,在这个例子中,如果这是16.x 中的最新版本,则可以安全地安装^16.12.1

有时一个版本前面有一个~ (例如:~16.8.6 )。这意味着只有最新的补丁版本可以安全安装。所以在这个例子中,如果这是16.8.x 中的最新版本,^16.8.12 可以安全安装。

那么,npm install 安装依赖的最新安全版本?

是的,也不是!

如果软件包已经被安装到node_modules 文件夹中,那么npm install 不会更新任何软件包。

如果软件包还没有安装,并且存在一个package-lock.json 文件,那么npm install 将安装package-lock.json 中指定的确切依赖版本。

npm install 如果依赖项在 文件夹中不存在,并且没有 文件,则将安装最新的安全版本。然而,你可能认为最新的安全版本node_modules package-lock.json 没有被安装,因为 是没有变化的,但是如果你检查 文件夹中的软件包,最新的安全版本将被安装。package.json node_modules

那么,我如何安全地更新所有的依赖项?

首先,可以通过运行以下命令来发现已经过期的依赖项:

npm outdated

依赖项将被列出来:

npm outdated 想要的版本是可以采取的最新安全版本(根据语义版本和^~ 前缀)。最新版本是npm注册表中可用的最新版本。

通过使用下面的命令,可以将所有的依赖关系安全地更新到想要的版本:

npm update

除了更新node_modules 文件夹中的包之外,package.jsonpackage-lock.json 文件也将被更新。

如果我们不想更新所有的包,那么可以在命令的最后指定包的名字:

npm update "react" "react-dom"

在上面的例子中,React被更新。

更新有重大变化的所有依赖项

那么,当有重大的版本变化时,我们如何升级依赖关系?

也许最安全的方法是如下。

  • 检查依赖包的更新日志,看是否有可能影响我们的应用程序的突破性变化
  • 如果我们认为我们可以安全地进行升级,就运行以下命令:
npm install <packagename>@latest
  • 如果多个包在一起,你可以把它们都列出来。下面的例子将更新React到最新版本:
npm install react@latest react-dom@latest
  • 通过做一些测试来验证应用程序没有损坏
  • 对其他有重大版本变化的软件包重复这一过程

有没有一种更快的方法来更新所有的依赖关系,包括主要的版本变化?所以,像npm update ,但也是为了主要的版本更新?

是的,有一个叫做npm-check-updates的工具可以做到这一点。只要运行下面的命令:

npx npm-check-updates -u

这将把依赖关系更新到package.json 文件中的最新版本(包括主要的版本变化)。如果我们乐意继续升级,我们需要运行以下命令:

npm install

然后,这将升级node_modules 文件夹中的软件包,并且package-lock.json 文件也将被更新。

总结

  • 使用npm outdated 来发现过期的依赖项
  • 使用npm update 来执行安全的依赖性升级
  • 使用npm install <packagename>@latest 来升级到软件包的最新主要版本
  • 使用npx npm-check-updates -unpm install 将所有依赖关系升级到最新的主要版本