发布 npm package 的 access token 会过期怎么办?

在 npmjs 官网可以看到消息,之前老的 access token 将会被禁用,现在需要使用 granular access tokens。而这个新创建的 granular access tokens 会自动过期,每隔几十天就要重新生成一次 token,这也太变态了吧!

如果你使用 GitHub / GitLab 的自动构建工具,就不用担心,现在没有 access token 也可以自动发布到 npm,并且还会有这样一个 badge

Built and signed on
GitHub Actions

怎么设置呢?以我的 u301 包为例讲解。

第一步:在 npm 包设置里正确设置 Trusted Publisher

settings

主要是正确设置 workflow 的文件名。至于 Environment name 是多人协作时使用,假设 commit 是不受信的用户时,可以添加额外审批步骤。如果你只有一个人,可以留空。

第二步:添加 publish.yml

我的例子可以在这里找到完整文件:https://github.com/u301-shortener/u301-js/blob/main/.github/workflows/publish.yml
重点是这个

name: Publish to npm

on:
  push:
    # 只有 git tag 带 v 开头的版本号才会自动发布
    tags:
      - "v*"
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      # 这里添加的 id-token 可以让最后一行 `npm publish` 无需 access token 就能发布。
      id-token: write

    steps:
    # ......

      - name: Publish to npm
        uses: actions/setup-node@v4
        with:
          node-version: '24'
          registry-url: 'https://registry.npmjs.org'
      - run: npm publish --provenance

第三步:发布

推送完这个 GitHub action 文件后,只要每次在 package.json 增加下版本号,然后

git tag git tag v1.0.0
git push --tags

就能触发自动发布