vscode 保存时单引号变双引号实为 prettier 格式化所致,需在项目根目录配置 .prettierrc 并设 "singlequote": true,vue 项目还需调整 vetur 配置,eslint 应禁用 quotes 规则并启用 eslint-config-prettier。

VSCode 保存时单引号变双引号,不是 VSCode 自己干的
真正动手改引号的是 Prettier(或 Vetur、ESLint 插件间接调用的它),VSCode 只是执行了格式化命令。右下角状态栏如果显示 Prettier,或者按 Ctrl+Shift+P 输入 Format Document With 看到默认是 Prettier,基本就能确认。常见错误现象包括:'use strict' 被改成 "use strict",className='btn' 变成 className="btn",甚至 require('./utils') 里的路径也被换掉。
必须在项目根目录加 .prettierrc 才生效
VSCode 设置里写 prettier.singleQuote: true 是无效的——Prettier 根本不读 VSCode 的 JSON 配置。它只认项目级配置文件,优先级从高到低是:prettier.config.js > .prettierrc.cjs > .prettierrc.json > package.json 中的 prettier 字段。
最稳妥的做法:在项目根目录新建 .prettierrc(注意开头的点),内容只需一行:
{"singleQuote": true}
改完后必须执行 Developer: Reload Window 或重启 VSCode,否则缓存会继续用旧规则。
Vue 项目还要防 Vetur 暗中插手
如果你用 Vue + Vetur,即使配好了 Prettier,.vue 文件里的 <script></script> 块仍可能被 Vetur 自行格式化成双引号。这是因为 Vetur 默认用 prettier 作为 JS 格式化器,但没走你项目里的配置。
解决办法是在 settings.json 里强制它退回到 VSCode 原生解析器:
"vetur.format.defaultFormatter.js": "vscode-typescript"- 同时确保关掉
"vetur.format.enable": false(可选,更彻底)
这条配置和 Prettier 互不干扰,只管 .vue 里的 JS 部分,不影响 .js 或 .ts 文件。
ESLint 和 Prettier 共存时最容易踩坑
如果同时启用了 ESLint 插件并打开了 eslint.format.enable,它可能在背后调用 Prettier 做格式化,但又保留自己的 quotes 规则检查,结果就是:保存后引号被 Prettier 改成双引号,ESLint 却报错“Expected single quote”。
正确做法是让 ESLint 完全让权:
- 删掉
.eslintrc里的quotes、jsx-quotes这类引号相关规则 - 确保安装了
eslint-config-prettier并在extends中启用 - 关闭
eslint.format.enable,改用eslint-plugin-prettier把 Prettier 规则当 ESLint 规则跑(只校验,不格式化)
多工具链叠加时,格式化行为是否稳定,取决于谁在最后一步真正写入文件——这个顺序一旦乱了,引号就会反复横跳。











