简介
@marionebl/conventional-commits-parser 是一个用于解析 Conventional Commits 格式的 NPM 包。该格式是一种规范用于记录代码的变更,是一种轻量级的标准化项目结构。使用该包可以将提交信息解析成 JSON 格式,方便在项目中实现自定义合规性规则。
安装
使用 npm 可以轻松安装该包:
npm install @marionebl/conventional-commits-parser
使用
解析提交信息
首先我们需要引入 @marionebl/conventional-commits-parser:
const parser = require('@marionebl/conventional-commits-parser');
我们来假设有一个提交信息如下所示:
feat: add new feature The new feature is really awesome! Here are some details about it. BREAKING CHANGE: This is a breaking change, so please be careful.
我们可以使用该包进行解析,将其变成 JSON 格式:
-- -------------------- ---- ------- ----- ------- - - ----- --- --- ------- --- --- ------- -- ------ -------- ---- --- ---- ------- ----- --- -------- ------- ---- -- - -------- ------- -- ------ -- -------- -- ----- ------ - --------------------- -------------------- -- - -- ------- ------- -- -------- ----- -- ---------- ---- --- --------- -- --------- ------ --- --- --------- -- ------- ------ --- ------- -- ------ -------- ---- --- ---- ------- ----- ------- -- --------- --------- ------- ---- -- - -------- ------- -- ------ -- ---------- -- -------- --- -- ------------- --- -- ----------- -- -- -
可以看到,解析出来的结果中包含了提交信息的各个部分。
自定义规则
我们可以自定义规则来指定提交信息需要符合哪些规则才能通过验证。
以 headerMaxLength
为例,该规则定义了 type(scope)subject
这个字符串的最大长度。如果提交信息超过该长度,就会出现错误。
-- -------------------- ---- ------- ----- ------- - - ---------------- -- -- ----- ------- - - ---------------- --- --- ---- ------- ---- -- --------- --- --- - ---- ----------- --- --- ------- -- ------ ------- --- ---- ------- ---- --- ---- ------- ----- --- -------- ------- ---- -- - -------- ------- -- ------ -- -------- -- ----- ------ - -------------------- ---------
在上面的例子中,由于 headerMaxLength
限制了提交信息的长度,运行以上代码时你将会得到一个错误:
Parsing error: Header is too long: "feat(important): add new long feature that is important and has a long description"
钩子
我们还可以通过钩子来自定义处理提交信息的逻辑。
以 noteKeywords
为例,该规则定义了表注可以使用的关键字。我们可以使用钩子,在提交信息解析之前将这些关键字替换为我们自定义的内容。
-- -------------------- ---- ------- ----- ------- - - ------------- - -------- --------- ------ -- ----------------- - --------- ---------- -------- -------- -------- ----- -- ---------- -------- -- - --------------------------- -- - ---------- - -------- --------------- --------- - -- -------------- --- -- ------------------------- - -- - ------------------------------------- -- - ---------------- - ------------------------------- --- - ------ ------- - -- ----- ------- - - ----- --- --- ------- --- --- ------- -- ------ -------- ---- --- ---- ------- ----- --- ------ ---- ----- ---- -- ----- ------ - -------------------- --------- -------------------- -- - -- ------- ------- -- -------- ----- -- ---------- ---- --- --------- -- --------- ------ --- --- --------- -- ------- ------ --- ------- -- ------ -------- ---- --- ---- ------- ----- ------- -- --------- ---------- ------ ------- --------- ----- ------- -- -- -------- - -- - -- -------- -------- ------- -- ------- -- ----- -- -- -- - -- -------- -------- ------ -- ------- -- ----- -- - -- -- -- ------------- --- -- ----------- -- -- -
可以看到,在 transform
钩子函数中,我们设定了让所有表注的标题变为 "Related "
,并在表注内容前添加 "-"
,我们还将参考的操作内容统一转换成大写形式。最终我们成功解析了提交信息并进行了自定义处理。
结论
通过使用 @marionebl/conventional-commits-parser,我们可以很方便的实现提交信息的解析、自定义规则与自定义处理,来达到项目规范性的要求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005665481e8991b448e2783