likes
comments
collection
share

使用GitHub流水线自动发布npm包

作者站长头像
站长
· 阅读数 6

在当今软件开发的世界中,快速、高效地发布和部署软件包是至关重要的。上回我们说了如何利用GitHub流水线来自动化发布Rust的包,本文手把手教你如何自动发布一个npm包。

npm申请access token

首先,你肯定得有个npm账号,怎么注册就不细说了。 登陆以后,在个人设置里,找到access tokens: 使用GitHub流水线自动发布npm包 看到access tokens这一栏 使用GitHub流水线自动发布npm包 在Generator New Token下拉有2个选项,第一个粒度更精细些,我们用第二个传统的Classic Token就可以。 打开后,选择Publish: 使用GitHub流水线自动发布npm包 点击Generate Token按钮,然后就生成了一个token: 使用GitHub流水线自动发布npm包 这个token只会出现一次,所以需要你复制,做好备份。

GitHub工程配置流水线

这一步,与Rust工程的没有两样,都是利用GitHub的能力。 在这个工程的设置里,找到Secrets: 使用GitHub流水线自动发布npm包 点击New repository secret,名称填npm_token: 使用GitHub流水线自动发布npm包

在当前工程下,新建.github/workflows/npm-publish.yml,内容如下:

# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages

name: Publish Package to npmjs

on:
  push:
    # branches: [ main ]
    # paths:
    #   - 'src/'
    tags:
      - '**'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
      - run: yarn
      - run: npm run build
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

有几点注意:

  1. 如果你有单元测试的部分,也可以对应加上。
  2. 我这里用的yarn,你也可以改为npm ci或者pnpm i(可能需要额外安装)。
  3. Node.js版本这里用的16,你可能要对应修改
  4. 流水线的触发策略这里是打tag后触发,你也可以修改为主分支。但不管怎样,都需要注意每次发版,package.json里的版本号(一般不要手动修改,而是用npm version命令)

到GitHub这个工程页面看 使用GitHub流水线自动发布npm包 点开Actions: 使用GitHub流水线自动发布npm包 流水线成功后,就能收到npm给你发的邮件了: 使用GitHub流水线自动发布npm包 npm仓库里也就有了这个包: 使用GitHub流水线自动发布npm包

TIPS

  1. 如果你的工程确定要发布到npm上,建议根目录下创建.npmrc文件,内容为registry=https://registry.npmjs.org/
  2. 建议添加.npmignore,用来忽略不需要发布的文件。当然,如果没有它,npm会读取.gitignore。如果把node_modules发上去,就闹笑话了。
  3. 推荐使用TypeScript开发工具包
  4. 考虑到你的npm包的不同受众或平台,你最好发布多种类型的文件,比如CommonJS、ESM或者UMD(JS模块化发展到今天,不是很有必要了),然后在package.json中添加以下几个字段,分别对应不同的模块化方案与类型:
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
  1. 本地npm publish

有的同学可能觉得在GitHub上配置这一通麻烦,那么不用流水线,就在本地执行npm publish,能不能做到自动化?

当然是可以的。

package.json的scripts提供了相应的几个钩子。打个比方,你有个build的命令,那么执行npm run build时,会先执行npm run prebuild,执行完以后,再执行npm run postbuild。注意看,就是pre和post这俩单词。

而npm publish命令,肯定也是有预构建的命令的,npm prepublish。不过,它被弃用了,换成了这俩prepublishOnlyprepare

也就是说,你可以使用这两个命令来整合你预发布需要做的事情,比如升级版本号,比如单元测试,比如构建。 以下是个样例:

"prepare": "npm version patch && npm run test && npm run build"

当你执行npm publish时,就会先触发npm run prepare。

总结

通过本文的学习,我们了解了如何利用GitHub流水线的强大功能来自动化发布npm包。自动化发布不仅提高了我们的开发效率,还降低了人为错误的风险。文末也给出了一些TIPS建议,你也可以使用npm的hook功能在本地实现自动化。

转载自:https://juejin.cn/post/7254786711703240759
评论
请登录