我正在参与会员专属活动-源码共读第一期,点击参与

学习方针

带着以下几个方针和问题来学习 release-it

  • release-it 是什么?
  • 学会使用 release-it
  • release-it 的作业原理是什么?
  • npm init release-it 指令是怎样生成的项目?

好记性不如烂笔头

  • 履行 npm init release-it 指令时记得换 npm 源,否则装置会很慢

  • npm init release-it 怎么没有初始化项目?

    经过阅览 release-it 仓库的文档,npm init release-it 是相对于直接装置是更推荐的用法。

    我理解的这行指令会初始化项目,但是成果有点出入,下面是我操作的步骤。

    新建了一个名字为 release-it-demo 的文件夹,在终端中打开后履行 npm init release-it 时报了个警告 saveError ENOENT: no such file or directory,而且并没有为项目生成package.json 以及 .release-it.json 文件。

    查看 npm-init | npm Docs 后,经过在指令后边加上项目名称的方式也无法自己生成上述的两个文件。

学习使用 release-it

release-it 是什么?

官网给出的介绍如下:

主动化版别操控和包发布

Automate versioning and package publishing

它能够主动提升版别号,主动打tag,生成changelog等。

使用 release-it

初始化一个名为 release-it-demo 的项目。

新建 .release-it.json 文件,写入下面的装备:

{
  "github": {
    "release": false
  },
  "git": {
    "commitMessage": "release: v${version}"
  },
  "npm": {
    "publish": false
  },
  "hooks": {
    "after:bump": "echo 更新版别成功"
  },
  "plugins": {
    "@release-it/conventional-changelog": {
      "preset": "angular",
      "infile": "CHANGELOG.md"
    }
  }
}

装置 changelog 插件

npm i @release-it/conventional-changelog -D

运行

npm run release

输入完package.json 的版别号增加,生成 CHANGELOG.md 文件,并且操控台会问询你用不用提交,要不要打TAG,要不要推送。

release-it 的作业原理是什么?

克隆 release-it 仓库。

npm init release-it的原理

npm init < initializer > 用于创建一个空项目或许为已有项目生成 package.json, initializer 是一个名为 create-< initializer > 的 npm 包,将由 npx 装置, 也就是说 npm init release-it 实际上履行的是 npx create-release-it.

打开 create-release-it/index.js 文件,如图:

源码共读之:release-it 是如何工作的

这个文件界说了一个自履行函数,这个函数的主要功能有三个:

  • 在 package.json 的文件中生成装备项
  • 生成 .release-it.json 文件
  • 在项目中装置 release-it 依赖

这也就是刚开始项目中没有 package.json 文件时,操控台报警告的原因。

源码是怎么完成 npm run release

查看package.json装备中的 scripts 脚本,发现履行了lib下的release-it.js

源码共读之:release-it 是如何工作的

在 release-it.js 中调用的是 lib/cli.js,查看cli.js

源码共读之:release-it 是如何工作的

发现 npm run release 不带-v,-h 参数时走的是 runTask 方法。

runTask 会读取 .release-it.json 文件中的装备,完成相应的更改版别号,一句hook生成 changelog,git 提交等操作。