【源码阅读】npm发包小助手(release-it)

629 阅读3分钟

背景

开发一个工具库并把它发布到npm平台,目的当然是方便自己和他人方便的使用、PR优化(更好的使用)。

想要别人参与且有较好的体验则需要一定的规范化,个人理解包括以下方面:

  1. 规范的Commit Message
  2. 语义化的版本号(结合tag)
  3. 详细的版本变更内容ChangeLog(基于1.)
  4. 详细的文档Readme

每次发包的步骤可能是:

功能实现编码 => 提交commit => 打tag => 编辑版本变更内容 => 上传到npm平台 => 代码推送到远程仓库

问题:需要手动操作的步骤较多,繁琐易出错

release-it就是针对npm包开发发布场景的辅助工具,结合其他工具可以在编码完成提交commit后执行,自动完成打标签、生成ChangeLog、上传npm平台等操作。

准备

  1. GitHub创建仓库、并克隆到本地。(配置好SSH认证,否则无法push到远程仓库)
  2. 本地终端中登录npm平台账号。(npm login

项目初始化&依赖安装

项目初始化

在代码目录内执行一下命令,生成package.json。

npm init

在package.json中,配置命令对应的可执行文件。可执行文件以#!/usr/bin/env node开头。

bin.png

commit标准化辅助工具安装

安装&配置使用commitizen,对话式提交commit辅助工具。

npm install commitizen 
commitizen init cz-conventional-changelog --save-dev --save-exact

安装release-it

npm i -D release-it

项目目录中出现文件名为.release-it.json的配置文件,在此修改发布相关的配置。

在hooks部分,添加后置生成ChangeLog任务的配置(配合安装auto-changelog):

{
...
  "hooks": {
    "after:bump": "npx auto-changelog -p"
  }
}

开发&发布

根据自己的功能需求,编码实现命令行工具。

以我的demo为例,命令pGit工具提供的功能是对一系列Git操作的封装。

pGit branch feature-AAA

实际执行的是:

git stash & git checkout -B feature-AAA

发布

npm run release

在交互界面,选择版本类型(major|minor|patch),是否打tag,是否发布npm包一系列确认。

无报错信息发布完成之后。再在测试目录中安装上传的npm包,运行命令,看是否为预期结果。

总结&收获

  1. Npm包开发的好帮手。 release-it这个库能实现多个手动任务的串联执行,降低手动操作出错概率,是我们开发npm包的实用工具。

  2. Node.js命令行工作的范例。 库本身有配置文件下载读取等常见功能,也有插件机制、hooks等支持扩展化的功能,学习架构或者要实现类似功能命令行工具,它是很好的参照。