commit-pack

中文文档
1.2.15发布于 2026/11/03MITES Module

A lightweight initializer for code quality and commit conventions

原始使用文档
文档目录16 节
  1. ✨ 特性
  2. 🎬 Demo
  3. 🚀 快速开始
  4. 安装
  5. 在项目根目录初始化
  6. Monorepo
  7. 🛠️ 包含的内容
  8. AI 提交规范
  9. ESLint 配置
  10. Prettier 配置
  11. Commitlint 配置
  12. Commitizen 配置
  13. 📋 可用脚本
  14. 🤝 贡献
  15. 致谢
  16. ©️ 许可证

commit-pack

自动化的项目代码质量和提交标准化设置。集成 ESLint、Prettier、Husky、lint-staged、commitlint 和 commitizen,执行代码风格检查和标准化提交消息。

✨ 特性

  • 代码质量: 集成 ESLint,支持 TypeScript 解析器和推荐配置
  • 代码格式化: Prettier 带有预设的格式化规则
  • Git 钩子: Husky 驱动的提交前和提交消息验证
  • 暂存文件: lint-staged 只对暂存文件运行检查
  • 提交验证: commitlint 确保符合常规提交格式
  • 交互式提交: commitizen 提供引导式提交创建
  • 多包管理器: 支持 pnpm、npm、yarn 和 bun
  • 支持 Monorepo: 使用 -w 标志处理基于工作区的项目
  • 安全回滚: 初始化失败时恢复原配置、Husky 目录、package.json 和锁文件

🎬 Demo

https://github.com/user-attachments/assets/8d99c810-81f2-4678-bf62-22bc5d2eee2a

🚀 快速开始

安装

  1. pnpm
pnpm add -D commit-pack@latest
  1. bun
bun add -d commit-pack@latest
  1. npm
npm install -D commit-pack@latest
  1. yarn
yarn add -D commit-pack@latest

要求 Node.js >= 20.19。选择一种包管理器,依次完成“安装”和“初始化”两步。 安装时不再自动生成配置或启用 Git 钩子。 初始化时会一次性将缺少的工具安装为项目开发依赖,再生成配置并设置钩子。

在项目根目录初始化

  1. pnpm
pnpm exec commit-pack-init
  1. bun
bun run commit-pack-init
  1. npm
npx commit-pack-init
  1. yarn
yarn exec commit-pack-init

Monorepo

在 monorepo 根目录执行,将 workspace-name 替换为目标工作区 package.json 中的 name。 此命令代替上面的根目录初始化命令,无需先初始化根目录。

pnpm exec commit-pack-init -w workspace-name

或

pnpm exec commit-pack-init --workspace=workspace-name

🛠️ 包含的内容

AI 提交规范

初始化会在目标项目生成 COMMIT_CONVENTION.md,从当前 Commitizen 与 commitlint 配置提取提交类型、scope、描述长度及 footer 约定。 如果目标目录已有 AGENTS.md、CLAUDE.md 或 .github/copilot-instructions.md,会追加规范文件的相对链接;没有这些文件时不会创建它们。 重复初始化只更新 <!-- commit-pack:begin --> / <!-- commit-pack:end --> 区块,保留区块外的用户内容;已有同名规范文件会追加该区块。文档更新纳入失败回滚,符号链接不写入。 使用 -w 时仅处理目标工作区,不改动仓库根目录的 AI 指令。配置变更后可重新初始化刷新规范,提交消息仍以实际 commitlint 校验为准。

ESLint 配置

  • 使用 ESLint 9 flat config,搭配 typescript-eslint 8 支持 TypeScript
  • 检查 JS/JSX/TS/TSX 及对应模块扩展名;JSON 交给 Prettier 格式化
  • ESLint 与 Prettier 分开运行,eslint-config-prettier 关闭冲突规则
  • 检测到已有 ESLint 配置时,直接覆盖为默认 flat config,并移除其他 ESLint 配置文件
  • 依赖版本范围与默认工具链不兼容时,初始化会在修改前停止并提示
  • 存在 .commit-pack-init 标记时,重新初始化会补齐缺失的脚本、依赖和配置文件,保留已有的非 ESLint 配置及自定义 hook,并覆盖已有 ESLint 配置。ESLint 8 依赖需要手动调整到兼容范围

eslint.config.mjs

import js from '@eslint/js'
import tseslint from 'typescript-eslint'
import globals from 'globals'
import prettier from 'eslint-config-prettier'

export default tseslint.config(
  { ignores: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/lib/**', '**/coverage/**', '**/.husky/**'] },
  {
    files: ['**/*.{js,jsx,mjs,cjs,ts,tsx,mts,cts}'],
    extends: [js.configs.recommended],
    languageOptions: {
      globals: { ...globals.browser, ...globals.node },
      parserOptions: { ecmaFeatures: { jsx: true } }
    }
  },
  { files: ['**/*.{ts,tsx,mts,cts}'], extends: [tseslint.configs.recommended] },
  prettier
)

Prettier 配置

  • 字符串使用单引号
  • 打印宽度为 100 个字符
  • 不使用分号
  • Tailwind CSS 插件按需安装,默认不包含
  • 一致的间距和格式

.prettierrc

{
  "singleQuote": true,
  "printWidth": 100,
  "jsxSingleQuote": true,
  "bracketSameLine": true,
  "semi": false,
  "tabWidth": 2,
  "bracketSpacing": true,
  "trailingComma": "none"
}

需要 Tailwind 类名排序时,再单独安装 prettier-plugin-tailwindcss,并在 .prettierrc 中添加 "plugins": ["prettier-plugin-tailwindcss"],注意选择与项目 Prettier、Node.js 兼容的版本。

Commitlint 配置

  • 强制执行常规提交格式
  • 自定义表情符号前缀的提交类型
  • 范围验证
  • 详细的提交消息结构

.commitlintrc.json

{
  "extends": ["@commitlint/config-conventional"],
  "parserPreset": {
    "parserOpts": {
      "headerPattern": "^(.+?)\\((.+?)\\): (.+)$",
      "headerCorrespondence": ["type", "scope", "subject"]
    }
  },
  "rules": {
    "scope-empty": [2, "never"],
    "type-enum": [
      2,
      "always",
      [
        "✨ feat",
        "🐛 fix",
        "🎉 init",
        "📗 docs",
        "🌈 style",
        "🍀 refactor",
        "🔥 perf",
        "✅ test",
        "⏪️ revert",
        "📦 build",
        "🚀 chore",
        "👷 ci"
      ]
    ]
  }
}

Commitizen 配置

  • 交互式提交界面
  • 预定义的表情符号提交类型
  • 可自定义范围
  • 引导式提交消息创建

初始化会自动生成 .cz-config.cjs 并在 package.json 中注册,兼容设置了 "type": "module" 的项目。

.cz-config.cjs

module.exports = {
  types: [
    { value: "✨ feat", name: "  ✨  feat: 新功能" },
    { value: "🐛 fix", name: "  🐛 fix: 修复bug" },
    { value: "🎉 init", name: "  🎉 init: 初始化" },
    { value: "📗 docs", name: "  📗 docs: 文档变更" },
    { value: "🌈 style", name: "  🌈 style: 更改样式" },
    { value: "🍀 refactor", name: "  🍀 refactor: 重构" },
    { value: "🔥 perf", name: "  🔥 perf: 性能优化" },
    { value: "✅ test", name: "  ✅  test: 测试" },
    { value: "⏪️ revert", name: "  ⏪️ revert: 回退" },
    { value: "📦 build", name: "  📦 build: 打包" },
    { value: "🚀 chore", name: "  🚀 chore: 构建/工程依赖/工具" },
    { value: "👷 ci", name: "  👷 ci: CI related changes" },
  ],

  scopes: [
    { name: "components" },
    { name: "page" },
    { name: "css" },
    { name: "api" },
    { name: "README.md" },
    { name: "custom" },
  ],

  messages: {
    type: "请选择提交类型(必填)",
    scope: "请选择文件修改范围(必填):",
    customScope: "请输自定义文件修改范围(必填)",
    subject: "请简要描述提交(必填)",
    body: "请输入详细描述(可选)",
    breaking: "列出任何breaking changes(可选)",
    footer: "请输入要关闭的issue(可选)",
    confirmCommit: "确定提交吗",
  },

  allowCustomScopes: true,
  allowBreakingChanges: ["✨ feat", "🐛 fix"],
  subjectLimit: 49,
};

📋 可用脚本

初始化会在 package.json 中添加以下脚本;同名脚本已存在时保留原值:

  • lint: 对 JavaScript/TypeScript 文件运行 ESLint(包括 JSX/TSX)
  • format: 使用 Prettier 格式化所有文件
  • commit: 使用 commitizen 进行交互式提交

以 pnpm 为例(monorepo 请在目标工作区目录内执行):

pnpm run format
pnpm run lint
git add .
pnpm run commit

使用其他包管理器时,将 pnpm run 替换为 npm run、yarn run 或 bun run。 Git 提交时会自动检查暂存文件和提交消息。 初始化还会将 Husky 加入 prepare,保留已有的 prepare 命令。

🤝 贡献

  1. Fork 仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 进行修改
  4. 运行 linter (pnpm run lint) 和格式化 (pnpm run format)
  5. 使用 commitizen 界面提交更改 (pnpm run commit)
  6. 推送到分支 (git push origin feature/amazing-feature)
  7. 创建 Pull Request

致谢

本项目以工程整合与工作流设计为核心, 基于一组成熟且优秀的开源工具, 构建了一个更易用、更一致的开发者工具链。

本项目并未引入新的底层技术, 其价值主要体现在整合方案、默认配置与开发体验优化上。

相关核心能力均来自对应开源项目,特此致谢其作者与维护者。

  • ESLint —— 可配置、可扩展的 JavaScript 代码检查工具
  • Prettier —— 具有统一风格约定的代码格式化工具
  • Husky —— 简化 Git Hooks 配置与使用的工具
  • lint-staged —— 仅对暂存区文件运行代码检查
  • commitlint —— 用于校验提交信息规范的工具
  • commitizen —— 交互式生成提交信息的工具
  • TypeScript —— 面向大型应用的强类型 JavaScript

©️ 许可证

此项目根据 MIT 许可证授权 - 详见 LICENSE 文件。

版本与发布记录

commit-pack 共发布 33 个版本,首次发布于 2024/11/06;过去 12 个月发布了 13 个版本。

版本发布日期距今
1.2.15latest2026/11/03今天
1.2.142026/10/303 天前
1.2.132026/10/304 天前
1.2.122026/10/294 天前
1.2.72026/03/077 个月前
1.2.52026/02/088 个月前

关于 commit-pack 的常见问题

commit-pack 是什么?

用于代码质量和提交约定的轻量级初始化器

如何安装 commit-pack?

在项目目录运行 npm install commit-pack,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 commit-pack-init,可以用 npx commit-pack-init 直接运行。

commit-pack 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/commit-pack 是否存在。

commit-pack 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

commit-pack 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.19.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

commit-pack 可以商用吗?

commit-pack 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

commit-pack 还在维护吗?

最新版本 1.2.15 发布于 2026/11/03(今天);至今共发布 33 个版本,其中过去 12 个月发布了 13 个;首次发布于 2024/11/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。