用途:在当前仓库中搭建 Husky pre-commit 钩子,配合 lint-staged、Prettier、类型检查与测试,尽量沿用仓库已有的包管理器与脚本,做最小改动。
主要能力:创建 Husky pre-commit 钩子;用 lint-staged 对暂存文件运行 Prettier;仅在仓库没有 Prettier 配置时创建配置;在钩子中调用已有的 typecheck/check 与 test 脚本。
使用方式:先读取 package.json 并检查锁文件判断包管理器(package-lock.json 为 npm,pnpm-lock.yaml 为 pnpm,yarn.lock 为 yarn,bun.lock 或 bun.lockb 为 bun),不明确时默认 npm。按顺序优先使用已有脚本:类型检查 typecheck、check;测试 test、test:unit;格式化 format,否则用 lint-staged 配合 Prettier。以 dev 依赖安装 husky、lint-staged、prettier,已存在的跳过。初始化 Husky,例如 npm 下运行 npx husky init,会创建 .husky/ 并通常在 package.json 添加 prepare: "husky"。编写 .husky/pre-commit,使用检测到的包管理器运行器,例如 npm 下为 npx lint-staged、npm run typecheck、npm run test,脚本名按 package.json 实际存在调整,缺失则省略并在结果中说明。Husky v9+ 钩子文件无需 shebang。仅在无 lint-staged 配置时创建 .lintstagedrc,内容为 {"*": "prettier --ignore-unknown --write"};已有配置则保留并做最小修改。仅在无 Prettier 配置时创建 .prettierrc,默认值:useTabs false、tabWidth 2、printWidth 80、singleQuote false、trailingComma es5、semi true、arrowParens always;已有配置不替换。最后验证 .husky/pre-commit 存在且可执行、package.json 有 prepare 脚本、lint-staged 配置存在、Prettier 配置存在或有意依赖默认值,并在可行时运行 lint-staged。
限制:除非用户明确要求,否则不创建提交;不覆盖已有的格式化、lint-staged 或钩子设置;若仓库测试开销大导致钩子过慢,添加完整测试命令前需先询问;最终回复应如实说明改动的文件、添加的脚本和执行的验证。