格式化报Unexpected错误,根本不是代码写错,而是格式化器解析阶段失败:文件编码非UTF-8 without BOM、含非法Tab、语言模式错配、.prettierrc语法错误或缺失配置均会导致静默退出。

格式化报 Unexpected 错误,先别改代码
这类错误根本不是你代码写错了,而是格式化器连文件都没法正常读进去。Prettier、ESLint 或 XML 解析器在解析阶段就崩了,后续所有格式化逻辑直接跳过。常见现象包括:Unexpected tab character、Unexpected token <、Unexpected end of JSON input。
- 检查文件编码:必须是
UTF-8 without BOM,带 BOM 的.json或.vue文件必报错 - 删掉所有
Tab字符(尤其从 Word/网页粘贴来的),Prettier 默认禁用 Tab;若要用,必须显式设prettier.useTabs: true -
.vue文件里<template>区域缺<!DOCTYPE html>或标签未闭合,也会触发Unexpected token < - 打开命令面板 →
Developer: Toggle Developer Tools→ Console 标签页,搜parse或error,常能定位到具体哪行卡住
语言模式错配是静默失效主因
VSCode 不看文件后缀,只认右下角显示的语言 ID。显示 Plain Text 或 HTML 的 .vue 文件,Volar 和 Prettier 根本不会启动——它连“这是 Vue”都不知道,更不会去解析 <script setup> 里的 TS 语法。
- 点击右下角语言标识,手动选对:比如
.vue→Vue,.jsonc→jsonc,vite.config.ts→typescript - 在
settings.json中补全映射:"files.associations": { "*.config.ts": "typescript", "tailwind.config.*": "javascript" } - 确认没有被工作区配置覆盖:按
Ctrl+Shift+P→Preferences: Open Workspace Settings (JSON),搜editor.language或files.associations
Prettier 配置文件出错会静默退出
它不报错,也不提示,就直接放弃加载规则,退回到“什么都不做”的状态。你以为是插件没反应,其实是它压根没读进去你的 .prettierrc。
-
.prettierrc必须是合法 JSON:键和字符串值都得用双引号,不能有注释、尾随逗号、单引号 - 推荐改用
prettier.config.js,支持 JS 语法和注释,容错更强 - 运行
npx prettier --debug-check index.js,它会明确告诉你哪一行、哪个 key 解析失败(比如trailingcomma拼错,或endOfLine: "LF"大写了) - 检查
prettier.requireConfig是否被设为true:设了就得有配置文件,否则 Prettier 直接不干活
Format Document With 列表为空?说明格式化器没注册成功
右键 → Format Document With… 如果列表空或只有 None,代表 VSCode 没找到可用的格式化器。这不是快捷键问题,是调度链路断了。
- 确认扩展已启用:比如
esbenp.prettier-vscode在扩展面板里状态是「启用」,不是灰色 - 检查语言专属设置是否留空:
[javascript]块里"editor.defaultFormatter": ""会覆盖全局设置 - 对非标准语言(如
.html、.mdx),必须手动加语言块:"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 打开
Output面板(Ctrl+Shift+U),下拉选Prettier,看有没有启动日志;没日志=没加载,不是没生效
.prettierrc,而不是工作区根目录。monorepo 里某个 package 缺配置,就会导致那个目录下的文件全部静默失效。


















