commitlint.config.js 是 Node.js 模块,必须导出合法 JavaScript 对象;混入 HTML 标签(如 <div>)会导致 SyntaxError: Unexpected token '<' 报错,因其非 HTML 文件,不参与页面渲染,仅被 Node 环境加载执行。

commitlint 不处理 HTML 文件,也不依赖 HTML;所谓 “commitlint_html” 是误传或混淆概念,实际配置与 HTML 无关。
为什么 commitlint.config.js 里不能写 HTML 标签
commitlint 的配置文件(如 commitlint.config.js)是 Node.js 模块,导出的是 JS 对象。如果在里面混入 HTML 标签(比如 <div>、<script>),会导致 require() 失败,Node 直接报错 SyntaxError: Unexpected token '<'。
常见误操作包括:
- 把配置文件误存为
commitlint.html或用浏览器打开commitlint.config.js导致渲染成 HTML 页面 - 从网页复制代码时带入了隐藏的 HTML 实体(如
)或富文本格式 - 在 VS Code 中未正确识别文件类型,语法高亮显示异常,误以为要写 HTML
commitlint 配置必须用 JavaScript / JSON / YAML,不是 HTML
合法的配置方式只有三种,任选其一:
立即学习“前端免费学习笔记(深入)”;
-
commitlint.config.js:导出对象,支持动态逻辑(如根据NODE_ENV切换规则) -
commitlint.config.json:纯静态结构,不能写注释、不能用变量 -
commitlint.config.yaml:YAML 格式,注意缩进和冒号后空格
错误示例(含 HTML):module.exports = { <!-- 这行会直接报错 --> rules: { 'type-enum': [2, 'always', ['feat']] } };
正确示例(JS):module.exports = { rules: { 'type-enum': [2, 'always', ['feat', 'fix', 'docs']] } };
提交信息本身也不允许 HTML,但可含 Markdown 语法
Git 提交信息是纯文本,commitlint 校验的是 commit message 字符串内容,不是 HTML 渲染结果。虽然 GitHub/GitLab 页面会把提交描述里的 **bold** 或 `code` 渲染为 Markdown,但 commitlint 不解析 Markdown,只做字符串匹配和正则校验。
所以以下写法没问题(GitHub 可渲染):feat(ui): add responsive navbarFixes #123. Uses `flexbox` and drops IE11 support.
但以下写法会被 subject-full-stop 或 header-max-length 规则拒绝:feat(ui): <strong>add</strong> navbar(含标签,破坏语义)feat(ui): add navbar <!-- this breaks line length -->(注释超长且无意义)
真正需要 HTML 的环节:提交说明文档,不是 commitlint 配置
团队内部写《提交规范指南》时,可以用 HTML 发布到内网 Wiki,但那是文档交付物,和 commitlint 运行时完全隔离。此时要注意:
- 文档中引用的配置代码块必须用
<pre><code>包裹,避免被误解析 - 不要在文档里教人“把配置粘贴到 HTML 文件里”,这是最常被新人踩的坑
- Husky 钩子脚本(如
.husky/commit-msg)是 shell 脚本,也不是 HTML
配置落地最关键的细节:确保 commitlint 命令能被 husky 正确调用,而不是靠浏览器打开某个页面去“运行”。工具链在终端里跑,不在浏览器里。


















