NodeJS 如何检查package-lock.json是否过期?

zazmityj  于 2023-01-25  发布在  Node.js
关注(0)|答案(1)|浏览(152)

在CI中,我想检查package-lock.json是否与package.json同步更新,为此我使用npm ci
但是我发现如果我在package.json中更新主包版本(但是忘记在package-lock.json中更新),那么npm ci会通过而不会出错。
我遗漏了什么?如何检查匹配的根级别版本?
例如:
package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {...}
}

package-lock.json:
x一个一个一个一个x一个一个二个x
^此操作应失败

odopli94

odopli941#

您可以使用package-lock-utd执行此操作(https://www.npmjs.com/package/package-lock-utd)。
只需在项目的根目录中执行以下命令:

npx package-lock-utd@1.x.x

如果您的package-lock.json不是最新的(例如,因为您在更改“version”字段后忘记运行npm install),脚本将以非零退出代码退出。我在运行npm ci(或npm install)之前在CI中使用此检查,因为正如您所注意到的,如果package-lock.json不是最新的,npm ci并不总是失败。
GitHub操作工作流示例:

name: Main Checks

on: [push, pull_request, workflow_dispatch]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Check if package-lock.json is up to date
        run: npx --yes package-lock-utd@1.x.x

      # Now, run any command you like. This is just an example.
      - name: Install dependencies
        run: npm ci

      - name: Run the linter
        run: npm run lint

免责声明:我是这个软件包的作者。
过去,我在CI中使用了一个小shell脚本来执行此检查,但是,将此脚本从一个存储库复制到另一个存储库似乎不是最佳解决方案,这就是我创建此npm包的原因。

相关问题