Prettier 为啥不格式化我的 Vue 单文件组件?

令狐淇钧 阅读 16

我用 Prettier 格式化 Vue 文件时,模板部分完全没反应,是配置问题吗?

我已经装了 Vetur 和 Prettier 插件,也设置了默认格式化工具为 Prettier,但保存时只有 script 里的 JS 被格式化,template 还是乱的。试过重启 VS Code、删 .prettierignore,都没用。

<template>
  <div class="container">
<h1>Hello World</h1>
    <p>This is messy</p>
  </div>
</template>
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Tr° 国曼
这个问题我当时也卡了好久,后来才发现是 Vetur 的锅。

原因很简单:Vetur 默认用自带的 prettyhtml 格式化模板,而不是 Prettier。所以你虽然设了 Prettier 为默认格式化工具,但 Vetur 内部还是各玩各的。

解决办法有两个方向。

第一个是改 VS Code 设置,让 Vetur 把模板格式化也交给 Prettier。在 settings.json 里加上这几行:

"vetur.format.defaultFormatter.html": "prettier",
"vetur.format.defaultFormatter.css": "prettier",
"vetur.format.defaultFormatter.postcss": "prettier",
"vetur.format.defaultFormatter.scss": "prettier",
"vetur.format.defaultFormatter.less": "prettier",
"vetur.format.defaultFormatter.stylus": "stylus-supremacy"


改完重启一下 VS Code,应该就好了。

第二个方案更彻底,如果你用的是 Vue 3,建议直接卸载 Vetur,装 Volar(现在叫 Vue - Official)。Volar 对 Vue 3 支持更好,格式化也更顺手,不用折腾这些配置。Vetur 已经不太维护了,坑只会越来越多。

另外还有个坑点,确认一下你项目里装了 prettier 依赖,本地有 node_modules/prettier 或者全局装了也行。插件本身只是调用 prettier,没有依赖的话也会静默失败,什么都不干。

我当时排查了半天才发现是 Vetur 的 formatter 设置问题,官方文档写得太隐蔽了。
点赞
2026-02-28 23:08