配置 GitHub Actions 向 npm 发布包的步骤

npm 发布 package 的最简单的方式是:

  • 免费注册 npm 账号,并通过命令登录:npm login
  • 在当前项目目录下执行 npm publish .

这样不够自动化,每次需要手动执行命令。

可以借助 GitHub 的 Actions,当 push 代码后触发指定事件,会执行 build 过程并将 package 发布到 npm。

基本过程是:

  • web 页面登录 npm
  • 到 Account 看下是否设置了 Two factor authentication,默认是没有设置的
  • 如果设置了 two factor authentication,那么需要在这个 package 的 settings 中
    • 设置 publishing access 为 require two-factor authentication tokens (不是很确定)
    • 默认为 two-factor authentication is not required
  • 在 Access Tokens 中,创建一个 token,选择 Automation
  • 在 github repository 进入 Settings -> Secrets -> Actions, New repository secret, 将上一步的 token 复制进去,name 输入 NPM_TOKEN
  • 创建一个 workflows 文件,./.github/workflows/npm-publish.yml,见后
  • 修改代码中 package.json 中的 version,比如 1.3.9,git push 代码到 github
  • git tags v1.3.9 然后 git push --tags,将 tag push 到 github,这将触发 ci 和发布包的自动处理

代码:

./.github/workflows/npm-publish.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: Node.js Package

on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 16
- run: npm ci
- run: npm test

publish-npm:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 16
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

示例项目:https://github.com/MarshalW/max-tcp

本文参考了: Publish NPM packages using GitHub Actions: A How-To Guide