使用Trusted Publishing从GitHub Actions发布npm时出现404错误?
解决GitHub Actions OIDC发布npm包时的404错误
问题背景
用GitHub Actions的Trusted Publishing(OIDC认证)替代长期令牌发布npm包,工作流配置看似没问题,但发布时弹出404错误,提示版本不在注册表中:
npm notice npm notice Publishing to https://registry.npmjs.org/ with tag latest and public access npm error code E404 npm error 404 Not Found - PUT https://registry.npmjs.org/vite-plugin-slow-response - Not found npm error 404 npm error 404 'vite-plugin-slow-response@1.0.5' is not in this registry.
工作流文件./.github/workflows/publish.yml内容:
name: Publish on: push: tags: - 'v*.*.*' jobs: publish: runs-on: ubuntu-latest permissions: contents: read id-token: write steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 cache: 'npm' registry-url: 'https://registry.npmjs.org' - run: npm ci - run: npm test - run: npm run build - run: npm publish
解决步骤
1. 核对npm端Trusted Publisher配置
登录npm官网,进入目标包的「Settings」→「Trusted Publishers」页面,确认:
- 关联的GitHub仓库所有者(用户名/组织名)和你实际的仓库完全一致
- 仓库名称拼写无错误(必须和GitHub上的仓库名完全匹配)
- 触发规则设置为「Tag push matches
v*.*.*」,和工作流的触发条件对齐 - 如果你是第一次发布这个包,确保你是npm上该包名的所有者(包名未被他人占用)
2. 修正工作流细节
- 别手动设置
NODE_AUTH_TOKEN环境变量,actions/setup-node@v4会自动通过OIDC获取并配置认证令牌 - 在
npm publish命令后显式加--access public(即使默认是公开,显式指定能避免权限歧义),修改后的步骤:- run: npm publish --access public - 检查
package.json里的name字段,必须和错误信息中的vite-plugin-slow-response完全一致(大小写、连字符都不能错)
3. 验证OIDC认证是否生效
在工作流里加个调试步骤,查看npm认证状态:
- run: npm whoami
如果该步骤返回你的npm用户名,说明认证成功;要是返回401/403错误,证明OIDC配置没生效,得重新检查npm端的Trusted Publisher设置。
4. 首次发布的特殊处理
如果是第一次发布这个包,可先在本地用你的npm账号手动执行一次npm publish --access public(确保包名在npm上注册成功),之后再通过GitHub Actions发布后续版本。
内容的提问来源于stack exchange,提问作者Soviut
相关产品推荐
相关产品推荐

