在半年前就发现我很多项目里的 prettier 对 vue 内的 pug 不起效果了,我一直以为是我的问题,例如 VSCode 的扩展配置有问题啦、依赖安装不对啦之类的。
在我浪费了一个小时的人生去查找 GitHub 上的各种 issues 后,我发现这居然是个 prettier 的兼容性 bug:
[Bug?] Symlink’d plugins in node_modules are not auto detected. #8056
简单概括一下内容:使用 pnpm 时,prettier 的插件寻址机制未按预期那样起作用。
我正是在大约半年前由 yarn 转向了 pnpm,因此遇到了这个 bug。
关于这个 bug,官方摆烂了,因为这个 issue 最初是在 2020 年被提出的,至今没有进行修复。
最后还是万能的网友提出了解决方案:使用 js 配置文件显式的指定插件路径。
比如这样:
1 | // .prettierrc.cjs |
然后插件就起效果了……
我顺着这个 issue 看了一路,这个 bug 的原因大概是这样的:
prettier 的插件寻址机制是仅查看本体同级的 node_modules
文件夹以 @prettier/plugin-*
prettier-plugin-*
命名的文件夹。但是使用 pnpm 时,prettier 的真实地址是 node_modules/.pnpm/prettier@<version>/node_modules/prettier/index.js
这样一来同级的 node_modules
就变成了 node_modules/.pnpm/prettier@<version>/node_modules/
而这个文件夹显然只有一个 prettier,因此它按照既有逻辑是无论如何也找不到本地插件的……
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小鱼君的博客!
评论