Prettier 为啥不格式化我的 Vue 单文件组件?
我用 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>
原因很简单:Vetur 默认用自带的 prettyhtml 格式化模板,而不是 Prettier。所以你虽然设了 Prettier 为默认格式化工具,但 Vetur 内部还是各玩各的。
解决办法有两个方向。
第一个是改 VS Code 设置,让 Vetur 把模板格式化也交给 Prettier。在 settings.json 里加上这几行:
改完重启一下 VS Code,应该就好了。
第二个方案更彻底,如果你用的是 Vue 3,建议直接卸载 Vetur,装 Volar(现在叫 Vue - Official)。Volar 对 Vue 3 支持更好,格式化也更顺手,不用折腾这些配置。Vetur 已经不太维护了,坑只会越来越多。
另外还有个坑点,确认一下你项目里装了 prettier 依赖,本地有
node_modules/prettier或者全局装了也行。插件本身只是调用 prettier,没有依赖的话也会静默失败,什么都不干。我当时排查了半天才发现是 Vetur 的 formatter 设置问题,官方文档写得太隐蔽了。