我有一个软件包,每次部署应用程序时都希望将其更新到最新的可用版本。我希望这是自动化的,并且只针对这个包,所以我不能简单地删除我的锁定文件。
我很确定使用
^
只会更新依赖项,如果我专门告诉我的包管理器更新它。如何在每次安装时自动执行此操作?这是否可能,或者我必须手动运行更新命令?
latest
或 *
可以这样工作吗?我似乎找不到直接答案。
为了确保每次部署应用程序时特定包始终更新到最新版本,您通常需要利用包管理器的功能。让我们以 npm 为例来解决这个问题。
latest
或 *
latest
: 使用 latest
标签指定包通常意味着您将获得尊重包的 package.json
中定义的 semver 规则的最新版本。"*"
: 指定 *
通常表示“任何版本”,通常会获取可用的最新版本。但是,行为可能因包管理器及其配置而异。例如,如果某个软件包已安装并在
package-lock.json
中列出,则仅运行 npm install
不一定会将其更新到最新版本,除非您明确告诉 npm 更新它。
如果您想确保依赖项每次都会更新,而不需要手动运行更新命令,请考虑以下方法:
preinstall
/postinstall
脚本在您的
package.json
中添加预安装或安装后脚本,以运行特定软件包的更新命令。
"scripts": {
"preinstall": "npm up your-package-name"
// or
"postinstall": "npm up your-package-name"
}
这样,更新命令将在安装其他依赖项之前或之后自动运行。
.npmrc
配置您可以配置
.npmrc
文件来设置 package-lock=false
,但通常不建议在生产环境中这样做,因为它可能会导致不确定的行为:
package-lock=false
如果您使用 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
npx
另一种方法是利用
npx
直接调用脚本中的包更新:
"scripts": {
"prepare": "npx npm-check-updates -u && npm install"
}
每次运行
npm install
时,它都会检查 your-package-name
的更新并安装它们。
自动更新特定包的包需要在
preinstall
或 postinstall
脚本中添加更新命令,或者配置 CI/CD 管道来处理更新步骤。单独使用 latest
或 *
不会在每次安装时自动更新软件包,无需额外的脚本或配置。