Skip to content

解决 Prettier 设置中 husky install 已弃用错误

问题描述

在使用 Prettier 设置 Git 钩子时,许多用户(特别在 Windows 环境中)执行官方文档推荐的 pnpm exec husky install 命令时遇到以下错误:

bash
husky install 命令已弃用 (install command is deprecated)

环境信息:

  • Node.js 版本:20.11.0
  • pnpm 版本:8.15.0
  • 操作系统:Windows

这个问题通常出现在按照 Prettier 官方安装文档 操作时。核心原因是 husky 最新版本(>=9.0.0) 移除了 install 命令。

解决方案

错误原因分析

Husky版本升级

husky v9.0.1 的更新日志明确说明:

移除了 husky install 命令,改用 huskyhusky some/dir 实现相同功能

完整解决步骤

1. 更新命令调用方式

bash
# 错误的旧命令(已弃用)
pnpm exec husky install

# 正确的新命令(husky v9.0.1+)
pnpm exec husky

2. 设置 Prettier Git 钩子

bash
# 创建钩子目录(如不存在)
pnpm exec husky

# 添加 Prettier 钩子
pnpm exec husky add .husky/pre-commit "pnpm exec prettier --write ."

3. 验证钩子有效性

bash
# 测试钩子触发
git commit -m "测试 Prettier 钩子"

目录结构说明

成功配置后,项目根目录应有以下结构: .husky/ └── pre-commit # 此文件包含 Prettier 执行命令

完整工作流示例

bash
# 1. 初始化 husky
pnpm exec husky

# 2. 添加钩子
pnpm exec husky add .husky/pre-commit "pnpm exec prettier --write ."

# 3. 设置可执行权限(Windows跳过,Linux/macOS需要)
chmod +x .husky/pre-commit

# 4. 提交测试
git add .
git commit -m "验证 Prettier 钩子"

替代方案:显式指定目录

如果直接运行 pnpm exec husky 仍遇问题,可尝试显式指定钩子目录:

bash
# 显式指定 .husky 目录
pnpm exec husky .husky

# 添加钩子
pnpm exec husky .husky add pre-commit "pnpm exec prettier --write ."

常见问题解答

Q: 为什么旧的 install 命令会被弃用?

A: husky v9 简化了安装流程,husky 命令现在自动完成安装钩子目录的操作,无需额外 install 参数。

Q: 是否需要升级 husky?

A: 如果项目已使用 husky <9.0.0:

  1. 更新 package.json 中的 husky 版本:"husky": "^9.0.0"
  2. pnpm install
  3. 删除旧的 .huskyrc 或相关配置

Q: 钩子未执行怎么办?

A:

  1. 确保.husky/pre-commit文件存在
  2. 检查文件是否包含有效命令
  3. 在Linux/macOS中运行:chmod +x .husky/pre-commit
  4. 确认Git仓库已初始化 (git init)

最佳实践建议

  1. 版本锁定:在 package.json 中固定 husky 版本:

    json
    "husky": "^9.0.0"
  2. 跨平台支持:使用 -- 分隔参数:

    bash
    pnpm exec husky add .husky/pre-commit "pnpm exec prettier --write --loglevel warn ."
  3. 钩子链式操作:搭配 lint-staged 实现增量格式化:

    bash
    pnpm exec husky add .husky/pre-commit "pnpm exec lint-staged"
    js
    // .lintstagedrc
    {
      "*.{js,ts}": ["prettier --write"]
    }

遵循这些步骤后,您的Prettier Git钩子将成功设置,避免弃用错误,确保团队提交代码时的自动化代码格式化。