使用react-hook-use-cta 使用Github Actions发布NPM包

react-hook-use-cta dev(第 4 部分系列)

1 🚀 react-hook-use-cta v2 发布!🚀2 为 react-hook-use-cta 选择一个打包器3 使用 React-hook-use-cta 使用的 Github Actions 发布 NPM 包4 使用 react-hook-use-cta 使用的 Github Actions 发布 JSR 包

概述

我将介绍以下内容:

  • 关于 NPM 配置的一些知识
  • 最低限度的 package.json
  • Github Action 工作流程
  • 新平台

    现在您有了捆绑构建系统,请开始设置 NPM 来接收您的包。

    如果你还没有注册,请通过以下方式完成注册流程

    https://www.npmjs.com/signup

    然后再继续。

    确保使用 TOPT 启用多因素身份验证以提高安全性。如果没有它,本教程将无法进行。如果您错过了这部分,您可以从您的个人资料页面启用它。

    `https://www.npmjs.com/settings/your-account-name/profile`

    初始化

    如果你尚未创建 `package.json`,则可以通过 npm init 完成该过程

    npm init

    在生成文件之前会要求您填写调查问卷。

    npm init -y

    创建不包含问卷的文件。

    包名.json

    以下为最低限度。

    请将引用替换为:

  • your-account/your-package-name 替换为你的 github repo 位置
  • 作者姓名
  • 描述
  • 姓名
  • 带有有助于在搜索时匹配您的包裹的单词的关键字
  • {
      "author": {
        "name": "Your name"
      },
      "bugs": {
        "url": "https://github.com/your-account/your-package-name/issues"
      },
      "dependencies": {
      },
      "description": "Sweet package",
      "devDependencies": {
        "@parcel/bundler-library": "2.13.3",
        "@parcel/packager-ts": "2.13.3",
        "@parcel/transformer-typescript-types": "2.13.3",
        "@types/node": "22.10.3",
        "@types/react": "19.0.2",
        "parcel": "2.13.3",
        "react": "19.0.0",
        "rimraf": "6.0.1",
        "typescript": "5.7.2"
      },
      "exports": {
        "import": "./dist/esm/index.mjs",
        "require": "./dist/cjs/index.js",
        "types": "./dist/types.d.ts"
      },
      "files": [
        "dist",
        "src"
      ],
      "homepage": "https://github.com/your-account/your-package-name",
      "keywords": [
        "react",
        "typescript"
      ],
      "license": "MIT",
      "name": "your-package-name",
      "main": "dist/cjs/index.js",
      "module": "dist/esm/index.mjs",
      "peerDependencies": {
        "@types/react": ">= 16.8.0 || >= 17.0.0 || >= 18.0.0 || >= 19.0.0",
        "react": ">= 16.8.0 || >= 17.0.0 || >= 18.0.0 || >= 19.0.0"
      },
      "peerDependenciesMeta": {
        "@types/react": {
          "optional": true
        }
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/your-account/your-package-name.git"
      },
      "sideEffects": false,
      "source": "src/index.ts",
      "types": "dist/types.d.ts",
      "scripts": {
        "build": "rimraf dist && parcel build --log-level verbose",
        "postversion": "git push && git push --follow-tags",
        "version": "npm run build && git add -A dist",
        "version:major": "npm version major",
        "version:minor": "npm version minor",
        "version:patch": "npm version patch",
        "version:prerelease": "npm version prerelease --preid=pre"
      },
      "version": "0.0.0",
    }

    大部分都是标准的,但我想强调一下

    "files": [
        "dist",
        "src"
      ],

    这可以防止发布您的软件包在安装时不需要包含的额外文件。

    就我而言,唯一发布的文件是

    dist/
    src/
    LICENSE
    README.md
    package.json

    笔记:

    `src/` 可能不需要,但我喜欢将其包括在内以供参考。

    注意 注意:

    我喜欢用 `--preid=pre` 来标记我的预发布版本,但你可以选择其他内容或者不包括它。

    设置说明

    您可以在设置中包含一些额外内容,例如 eslint、husky、test 等,但我不想用太多信息来淹没它。我可以在此单独发布更多信息。

    Github Actions

    他们的市场上有可用的 github 操作,但我想创建一个您可以管理的工作流程。

    `.github/workflows/publish-package.yml`

    name: Publish to package registry
    
    on:
      # Allows you to run this workflow manually from the Actions tab
      workflow_dispatch:
    
    jobs:
      publish:
        runs-on: ubuntu-latest
        permissions:
          contents: read
          id-token: write 
    
        steps:
          - name: Checkout repository
            uses: actions/checkout@v4
    
          - name: Set up Node.js
            uses: actions/setup-node@v4
            with:
              node-version: "lts/*"
              registry-url: 'https://registry.npmjs.org'
              cache: npm
    
          - name: Restore cache
            uses: actions/cache@v4
            with:
              path: |
                ~/.npm
              key: ${{ runner.os }}-publish-${{ hashFiles('**/package-lock.json') }}
              restore-keys: |
                ${{ runner.os }}-publish-
    
          - name: Install npm dependencies
            run: npm ci
    
          - name: Publish to npm
            run: npm publish --provenance --access public
            env:
              NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}

    一个关键的要点是“--provenance --access public”标志。

    它们是提高供应链安全性的重要标志。如果没有它们,这个包就不会从 Github 发布。

    欲了解更多信息,请阅读生成出处声明

    验证_TOKEN

    https://dev.to/astagi/publish-to-npm-using-github-actions-23fn 对设置令牌有很好的解释。我将令牌命名为“NPM_AUTH_TOKEN”以匹配“env”

    收尾

    提交并推送更改到您的仓库。现在您可以看到您的工作流程,

    List of workflows

    选择要发布的分支或标签,

    List of tags

    并点击运行工作流

    Run Workflow Button

    接下来,我将介绍如何发布到 Javascript Registry。

    react-hook-use-cta dev(第 4 部分系列)

    1 🚀 react-hook-use-cta v2 发布!🚀2 为 react-hook-use-cta 选择一个打包器3 使用 React-hook-use-cta 使用的 Github Actions 发布 NPM 包4 使用 react-hook-use-cta 使用的 Github Actions 发布 JSR 包