Skip to content

解决 Prettier 3.0.0 中 prettier.resolveConfig.sync 未定义错误

当使用 Prettier 3.0.0 配合 ESLint 时,很多开发者会遭遇如下错误:

bash
TypeError: prettier.resolveConfig.sync is not a function
Occurred while linting *the first line of the first code directory*  
Rule: "prettier/prettier"

该错误会导致代码格式化流程中断,给开发带来不便。本文将详细解析问题根源并提供多种解决方案。

问题原因分析

该错误的核心原因在于版本兼容性问题

  • Prettier 3.0.0+ 对 API 进行了重大调整,移除了 resolveConfig.sync 方法
  • eslint-plugin-prettier@4.x 尚未适配新 API,仍在调用已被移除的函数
  • 版本冲突出现在 eslint-plugin-prettierprettier 之间

典型案例

当项目中同时存在以下依赖版本时会发生此错误:

json
"eslint": "^8.42.0",
"eslint-plugin-prettier": "^4.2.1",  // 不兼容版本
"prettier": "3.0.0"                 // 新版

解决方案

1. 升级 eslint-plugin-prettier(推荐)

这是官方推荐且最彻底的解决方案:

bash
# 使用 npm
npm install --save-dev eslint-plugin-prettier@^5.0.0

# 使用 yarn
yarn add -D eslint-plugin-prettier@^5.0.0

升级说明

eslint-plugin-prettier v5.0.0+ 完全兼容 Prettier 3.x 版本:

  • 适配了 Prettier 的 API 变更
  • 修复了 resolveConfig.sync 调用错误
  • 官方更新日志

2. 降级 Prettier 版本(兼容性方案)

若暂无法升级插件,可降级 Prettier 至 2.x 版本:

bash
# 使用 npm
npm install --save-dev prettier@^2.8.8

# 使用 yarn
yarn add -D prettier@^2.8.8

注意事项

降级后需同时锁定依赖版本:

json
{
  "eslint-plugin-prettier": "^4.0.0", // 保证 4.x
  "prettier": "^2.8.8"                // 保持 2.8.x
}

3. 验证 Prettier 是否安装

有用户反馈此错误实际由漏装 Prettier 导致:

bash
# 安装 Prettier 最新版
npm install --save-dev prettier

# 或使用 yarn
yarn add -D prettier

4. 检查相关工具兼容性

如使用 pretty-quick 等扩展工具,请检查其兼容性:

  • pretty-quick@v3.1.3 不兼容 Prettier 3.x (已知问题
  • 建议迁移至活跃维护的 lint-staged
    bash
    # 移除旧工具
    npm uninstall pretty-quick
    
    # 安装新工具
    npm install --save-dev lint-staged
    配置示例:
    json
    {
      "lint-staged": {
        "*.{js,css,md}": "prettier --write"
      }
    }

附加处理步骤

无论选择哪种方案,执行以下操作可避免缓存干扰:

  1. 删除 node_modules 文件夹
  2. 清理包管理器锁文件 (package-lock.jsonyarn.lock)
  3. 重新安装依赖:
    bash
    npm install
    # 或
    yarn install
  4. 重启 IDE(如 VSCode)

总结

方案适用场景优先级
升级 eslint-plugin-prettier@5新项目或可自由升级★★★★★
降级 Prettier@2.8.x受限于旧有兼容性★★★☆☆
确保 Prettier 安装基础环境问题★★☆☆☆

最佳实践建议

优先选择升级解决方案。Prettier 3.x 在性能和功能上有显著改进,配合最新的 eslint-plugin-prettier@5+ 使用最佳化工作流。

如需进一步排查问题,可直接参考官方 GitHub Issue:兼容性问题跟踪