有没有办法在每次安装运行时将 NPM 包更新到最新版本?

问题描述 投票:0回答:1

我有一个软件包,每次部署应用程序时都希望将其更新到最新的可用版本。我希望这是自动化的,并且只针对这个包,所以我不能简单地删除我的锁定文件。

我很确定使用

^
只会更新依赖项,如果我专门告诉我的包管理器更新它。如何在每次安装时自动执行此操作?这是否可能,或者我必须手动运行更新命令?

latest
*
可以这样工作吗?我似乎找不到直接答案。

npm
1个回答
-1
投票

为了确保每次部署应用程序时特定包始终更新到最新版本,您通常需要利用包管理器的功能。让我们以 npm 为例来解决这个问题。

使用
latest
*

  • latest
    使用
    latest
    标签指定包通常意味着您将获得尊重包的
    package.json
    中定义的 semver 规则的最新版本。
  • "*"
    指定
    *
    通常表示“任何版本”,通常会获取可用的最新版本。

但是,行为可能因包管理器及其配置而异。例如,如果某个软件包已安装并在

package-lock.json
中列出,则仅运行
npm install
不一定会将其更新到最新版本,除非您明确告诉 npm 更新它。

自动更新

如果您想确保依赖项每次都会更新,而不需要手动运行更新命令,请考虑以下方法:

1.使用
preinstall
/
postinstall
脚本

在您的

package.json
中添加预安装或安装后脚本,以运行特定软件包的更新命令。

"scripts": {
    "preinstall": "npm up your-package-name"
    // or
    "postinstall": "npm up your-package-name"
}

这样,更新命令将在安装其他依赖项之前或之后自动运行。

2.
.npmrc
配置

您可以配置

.npmrc
文件来设置
package-lock=false
,但通常不建议在生产环境中这样做,因为它可能会导致不确定的行为:

package-lock=false

3.持续集成 (CI) 配置

如果您使用 CI/CD 管道,则可以在部署脚本中包含

npm update your-package-name
步骤。例如,在 GitHub Actions 工作流程文件中:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: npm install -g npm@latest
    - run: npm up your-package-name
    - run: npm install
    - run: npm test

4.使用
npx

另一种方法是利用

npx
直接调用脚本中的包更新:

"scripts": {
    "prepare": "npx npm-check-updates -u && npm install"
}

每次运行

npm install
时,它都会检查
your-package-name
的更新并安装它们。

TL;博士

自动更新特定包的包需要在

preinstall
postinstall
脚本中添加更新命令,或者配置 CI/CD 管道来处理更新步骤。单独使用
latest
*
不会在每次安装时自动更新软件包,无需额外的脚本或配置。

© www.soinside.com 2019 - 2024. All rights reserved.