本文使用kimi对文章进行润色处理


在使用 GitHub 工作流发布 npm 包时,手动管理版本号的方式比自动更新版本号更加灵活和可靠。以下是一个基于手动推送 tag 触发 GitHub 工作流的示例,适用于同时发布到 GitHub Packages 和 npm 官方仓库。

GitHub 工作流配置

触发条件

通过手动推送带有版本号的 tag(如 v1.0.0)来触发工作流。

name: Publish Package

on:
  push:
    tags:
      - 'v*'  # 匹配所有以 v 开头的标签(如 v1.0.0)

工作流步骤

  1. Checkout 代码
    检出代码以便后续操作。

    - name: Checkout Code
      uses: actions/checkout@v4
    
  2. 设置 Node.js 环境
    配置 Node.js 环境,指定 Node.js 版本。

    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: 20
    
  3. 缓存 Node 模块
    使用缓存加速依赖安装过程。

    - name: Cache Node Modules
      uses: actions/cache@v4
      with:
        path: node_modules
        key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
    
  4. 安装依赖
    使用 npm ci 安装项目依赖。

    - name: Install Dependencies
      run: npm ci
    
  5. 构建项目
    执行构建命令,生成可发布的包。

    - name: Build Package
      run: npm run build
    
  6. 发布到 GitHub Packages
    将包发布到 GitHub Packages。

    - name: Publish to GitHub Packages
      run: |
        echo "//npm.pkg.github.com/:_authToken=${{ secrets.GH_PACKAGES_TOKEN }}" > .npmrc
        npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN }}
    
  7. 发布到 npm 官方仓库
    将包发布到 npm 官方仓库。

    - name: Publish to npm
      run: |
        sed -i 's/"name": "@scope\/package-name"/"name": "package-name"/g' package.json
        echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
        npm publish --access public --registry=https://registry.npmjs.org
        git checkout package.json
    

通过git推送标签触发工作流

git tag v1.1.0
git push origin v1.1.0

完整代码

name: Publish Package

on:
  push:
    tags:
      - 'v*'  # 匹配所有以 v 开头的标签(如 v1.0.0)

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Cache Node Modules
        uses: actions/cache@v4
        with:
          path: node_modules
          key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}

      - name: Install Dependencies
        run: npm ci

      - name: Build Package
        run: npm run build

      - name: Publish to GitHub Packages
        run: |
          echo "//npm.pkg.github.com/:_authToken=${{ secrets.GH_PACKAGES_TOKEN }}" > .npmrc
          npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN }}

      - name: Publish to npm
        run: |
          sed -i 's/"name": "@scope\/package-name"/"name": "package-name"/g' package.json
          echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
          npm publish --access public --registry=https://registry.npmjs.org
          git checkout package.json

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐