我们如何安全地升级项目中的npm依赖项?依赖包版本之前的滑稽^
和~
字符是什么意思?我们如何在项目中的npm依赖项上进行主要版本升级?我们将在这篇文章中找到。
版本零件
npm软件包版本控制遵循语义版本控制。因此,软件包版本包含3个部分-Major.Minor.Patch
- 补丁。当进行了不破坏使用代码的错误修复时,此值将递增
- 未成年人。当添加不会破坏耗时代码的功能时,此增量
- 专业。进行重大更改时增加
什么是^
和~
是什么意思?
一个版本通常^
在其前面(例如^16.8.6
)。这意味着可以安全地安装最新的次要版本。因此,在此示例中,^16.12.1
如果它是中的最新版本,则可以安全地安装16.x
。
有时某个版本的~
前面带有一个(例如~16.8.6
)。这意味着只能安全地安装最新的修补程序版本。因此,在此示例中,^16.8.12
如果它是中的最新版本,则可以安全地安装16.8.x
。
那么,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
的文件夹,最新安全版本将被安装。
那么,如何安全地更新所有依赖项?
首先,可以通过运行以下命令来发现过时的依赖关系:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> outdated</code></span></span>
依赖关系将列出:
该想的版本是可以采取(根据语义版本和最新安全版本^
或~
前缀)。在最新的版本是在NPM注册表提供的最新版本。
可以使用以下命令将所有依赖项安全地更新为所需版本:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> update</code></span></span>
除了更新node_modules
文件夹中的软件包之外,package.json
和package-lock.json
文件也会被更新。
如果我们不想更新所有软件包,则可以在命令末尾指定软件包名称:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> update <span style="color:#7ec699">"react"</span> <span style="color:#7ec699">"react-dom"</span></code></span></span>
在上面的示例中,React已更新。
通过重大更改更新所有依赖项
那么,当发生重大版本更改时,我们如何升级依赖关系?
也许最安全的方法如下:
- 检查相关程序包的更新日志,以了解可能影响我们应用程序的重大更改
- 如果我们认为可以安全进行升级,请运行以下命令:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> <span style="color:#f08d49">install</span> <span style="color:#67cdcc"><</span>packagename<span style="color:#67cdcc">></span>@latest</code></span></span>
- 如果将多个软件包组合在一起,则可以将它们全部列出。下面的示例将React更新到最新版本:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> <span style="color:#f08d49">install</span> react@latest react-dom@latest</code></span></span>
- 通过进行一些测试来验证应用程序是否未损坏
- 对主要版本有更改的其他软件包重复该过程
有没有一种更新所有依赖项(包括主要版本更改)的更快方法?因此,npm update
除了主要版本更新外,还可以吗?
是的,有一个名为npm-check-updates的工具可以做到这一点。只需运行以下命令:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell">npx npm-check-updates -u</code></span></span>
这会将依赖关系更新为文件中的最新版本(包括主要版本更改)package.json
。如果我们乐意继续进行升级,则需要运行以下命令:
<span style="color:rgba(0, 0, 0, 0.9)"><span style="color:#cccccc"><code class="language-shell"><span style="color:#f08d49">npm</span> <span style="color:#f08d49">install</span></code></span></span>
然后,这将升级node_modules
文件夹中的软件包,并且package-lock.json
文件也将被更新。
总结一下
- 使用
npm outdated
来发现过期了依赖性 - 使用
npm update
进行安全的依赖升级 - 使用
npm install <packagename>@latest
升级到包的最新主要版本 - 使用
npx npm-check-updates -u
并将npm install
所有依赖项升级到其最新的主要版本