【问题标题】:What is a convenient way to upgrade dependencies across multiple npm projects?跨多个 npm 项目升级依赖项的便捷方法是什么?
【发布时间】:2017-06-07 07:00:07
【问题描述】:

对于开源库作者,尤其是与 React 相关的作者,他们编写并发布了多个 React 组件是很常见的。但是,当 React 发布新版本(例如 v16)时,将这些组件中的每一个升级到最新的 React 版本是一件麻烦事。

在考虑稳定性的情况下,升级所有这些包中的 React 依赖项的便捷方法是什么?我不想手动进入每个项目并运行npm update,因为这需要很长时间。我考虑编写一个脚本来为我做这件事,但我想知道是否有任何工具可以做到相同甚至更好,并一次升级我所有项目中的包?

这个问题并不是针对 React 的,它也适用于 Angular、Vue 等,或者其他常用的 npm 库。

【问题讨论】:

    标签: reactjs npm open-source


    【解决方案1】:

    更新依赖的最简单方法:

    npm update
    

    它将仅根据 package.json 中的基础范围进行更新,例如。从 1.0.0 到 1.9.0,但不是到 2.0.0。见semantic versioning。在 package.json 中设置自动主版本升级不是一个好主意,所以通常npm update 会忽略主版本。

    如果要升级依赖主要版本,那就比较麻烦了。库中很可能会发生重大更改,您还需要升级您的代码

    这个库npm-check-updates可以帮助您更新到最新的版本。

     npm install -g npm-check-updates
     ncu // Shows new dependencies
     ncu -u // Will do upgrade in package.json
    

    这个库会搜索最新的包,甚至会更新。

    特别是React,如果您不需要自定义 webpack 构建,可以使用 CLI。 React-create-app 将创建具有隐藏依赖项的应用程序,例如 React、ReactDOM、Jest、Webpack 等,当您想要升级时,只需为整个 React&Webpack 堆栈更新一个依赖项即可。

    npm install -g create-react-app
    create-react-app my-app
    cd my-app/
    npm start
    

    如果您正在构建类似的应用程序(但不能使用 ReactCLI),您可以构建自己的 webpack 配置,该配置可能会在您的所有应用程序中重用,它将涵盖构建过程。这可能会隐藏构建依赖项,例如 WebpackReactRouter 等。

    更新:是否可以快速无缝地升级多个项目?例如。用简单的脚本。

    这可能非常复杂,甚至是不可能的。您需要在所有项目中具有完全相同的依赖项......因为您可能有一些不同库的不兼容版本。可能最好的方法是创建像react-cli has 这样的公共库堆栈,然后将此堆栈用作单一依赖项。但是,在升级“堆栈”依赖项之后,您仍然需要分别升级和测试每个项目——通常,由于 API 更改,您还需要升级代码库。制作更新脚本可能相当复杂,可能不值得。

    【讨论】:

    • 感谢您的回答!抱歉,我在这里问了一个不同的问题。我知道如何更新一个项目的依赖关系。我的问题是我想一次更新多个包中的依赖关系。
    • 我已经更新了响应 - 可能不值得构建这样的升级脚本,因为它太复杂了,而且库的 API 经常变化......也许其他人有这方面的经验,但可能不是在 JS 世界中很常见。是的,如果您想加快安装或更新速度,您可以尝试yarn,因为它比npm4 快几倍,比npm5 快一点。
    【解决方案2】:

    如果你在 gitlab、github、自托管 gitlab 等相关源码控制上可以查看我的回答What is the best way to authomatically update project dependecnies

    长话短说,您可以使用 Renovate,这是一个很好的工具来更新您在不同包管理器(如 maven、npm、gradle、pip 和其他包管理器)之间的依赖关系。它可以一次更新多个项目的依赖关系,并且还有其他好处。实际上,只要这些依赖项有新的更新可用,它就会自动使用这些更新创建合并请求。 虽然它可以在 CI/CD 之外使用,但如果您有 CI/CD 来创建这些合并请求,它可以运行您的管道并确保更新后一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多