You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在npm publish前验证版本号有效性?含CircleCI分支PR校验场景

如何在CircleCI的PR阶段验证npm包版本号更新(不提前发布)

完全可以实现这个需求!针对你用CircleCI做构建,想要在PR到master分支时验证版本号已更新、但又不想在合并前发布包的场景,我给你两个实用的解决方案,结合CircleCI的配置就能轻松搞定:

方案1:对比本地版本与npm仓库最新版本

这个方案适合已经发布过包的场景,通过拉取npm仓库里的最新版本,和当前PR分支的版本号做对比:

步骤1:编写版本验证脚本

在项目根目录创建scripts/validate-version.sh脚本,内容如下:

#!/bin/bash
set -e

# 获取当前package.json中的版本号
CURRENT_VERSION=$(jq -r '.version' package.json)
# 获取npm仓库中该包的最新版本号(替换成你的包名)
LATEST_VERSION=$(npm view your-package-name version)

if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
  echo "❌ 错误:版本号未更新!当前版本($CURRENT_VERSION)与npm仓库最新版本($LATEST_VERSION)一致。"
  exit 1
else
  echo "✅ 版本验证通过:当前版本($CURRENT_VERSION)与npm仓库最新版本($LATEST_VERSION)不同。"
fi

记得给脚本添加执行权限:chmod +x scripts/validate-version.sh

步骤2:配置CircleCI工作流

在.circleci/config.yml中添加验证job,并设置只在PR触发时运行,发布job只在master分支合并后运行:

version: 2.1
jobs:
  validate-version:
    docker:
      - image: cimg/node:20
    steps:
      - checkout
      - run: npm install -g jq  # 安装jq用于解析JSON(若镜像已自带可省略)
      - run: ./scripts/validate-version.sh

  publish-package:
    docker:
      - image: cimg/node:20
    steps:
      - checkout
      - run: npm install
      - run: npm publish  # 发布前确保CircleCI已配置NPM_TOKEN环境变量

workflows:
  version-check-and-publish:
    jobs:
      - validate-version:
          filters:
            branches:
              only: /pull\/.*$/  # 仅对PR触发的构建执行验证
      - publish-package:
          filters:
            branches:
              only: master  # 仅在master分支合并后执行发布

方案2:对比PR分支与master分支的版本号

如果你的包还未发布,或者不想依赖npm仓库,可以直接对比当前PR分支和master分支的package.json版本号:

步骤1:编写分支版本对比脚本

创建scripts/validate-version-against-master.sh脚本:

#!/bin/bash
set -e

# 获取当前分支的版本号
CURRENT_VERSION=$(jq -r '.version' package.json)
# 获取master分支的package.json版本号
MASTER_VERSION=$(git show master:package.json | jq -r '.version')

if [ "$CURRENT_VERSION" = "$MASTER_VERSION" ]; then
  echo "❌ 错误:版本号未更新!当前版本($CURRENT_VERSION)与master分支版本($MASTER_VERSION)一致。"
  exit 1
else
  echo "✅ 版本验证通过:当前版本($CURRENT_VERSION)与master分支版本($MASTER_VERSION)不同。"
fi

步骤2:更新CircleCI配置

把方案1中的validate-versionjob替换成调用这个脚本即可,其余配置保持一致。

注意事项

  • 如果是私有npm包,需要在CircleCI的项目环境变量中配置NPM_TOKEN,确保能拉取仓库版本或发布包。
  • 若使用monorepo结构,需要调整脚本中的package.json路径(比如packages/your-package/package.json)。
  • 可以根据需求扩展脚本,比如验证版本号是否符合语义化版本规范(semver)。

内容的提问来源于stack exchange,提问作者trentjones21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:29:13