我写这篇文章现已开端过许屡次了,可是从来没有发布过。我没有办法找到一个适宜的方式来表达我对Prettier的态度。可是这一次,我想我应该极力地解说一下,为以后做准备做参考。

首要,我并不反对运用Prettier。实际上,我喜爱它

我喜爱Prettier

Prettier是一个很棒的东西,它帮我节省了许多时刻。我感谢尽力让Prettier成为可能的维护者和贡献者,他们为社区中简洁明了的代码的体现奠定了良好的根底。我不得不供认这个标题起得有点标题党。我常常在交互式文档和playground演示场的项目中运用Prettier,例如VueUse和UnoCSS。我喜爱它的一点是它对许多言语支持开箱即用。集成Prettier的时刻本钱不到5分钟,我就能够通过Prettier来美化项目代码。

可是,为什么不呢?

假如你曾经浏览过我的开源项目,可能会发现我很少运用Prettier来格局化我的项目源代码。在这篇文章中,我会解说我做出这个决议的原因:

它是顽固的

Prettier将自己介绍描绘为“一个顽固己见的代码格局化东西”。

顽固己见本质上意味着它并不适用于每一个人。Prettier做了许多硬编码的决议来供给一个最小的装备接口。这使得它十分易于运用(这一点十分好!),而且跨项意图代码保持一致。可是,另一方面,这也意味着您正在失掉对代码外观进行细粒度调整的才能。

虽然我喜爱Prettier的大部分装备项决议,不过当你发现一些你不想要的装备而且没有解决方法时,它有时会让你心慌意乱。

换行的烦恼

让我很头疼的首要事情是基于代码长度的自动换行或不换行。Prettier有一个printwidth装备项,它限制每一行以适配必定的宽度(默许装备下,它是80字符)。让代码适应一个屏幕并防止界面水平翻滚是很棒的。

可是,我常常发现它会降低可读性和危害git的代码比照。

@patak_dev最近在 PR 检查中提出了一个比如:

【译】antfu博客:为什么我不必Prettier

【译】antfu博客:为什么我不必Prettier

有时,当您在JavaScript中修正字符串文本时,可能会使该行比 printwidth装备的值长了一点点,Prettier会强制进行换行。它打破了内联差异并使代码变更难以检查。想一下在另一个代码合并恳求中,咱们可能会将字符串缩短一点,然后Prettier会将这些行自动美化回一行。行数改变的来回会产生许多不必要的费事。

真正的痛点是,这种行为不是装备可选的。开发者不能彻底禁用它(#3468)。添加printwidth装备的长度只会延迟这种状况,而且会影响你未触及的其他文件。

下图显示了另一个示例:

【译】antfu博客:为什么我不必Prettier

左面是输入代码,右边是Prettier的输出。它遵循的规则过于严格,实际上使代码更难阅览和修正,违背了让代码更具可读性的最初目标。(printWidth装备为42是为了演示比如而装备的,printWidth能够装备为恣意值。)

相同,不好的一点是,这是强制性的。你能够做的仅有解决方法是运用// @prettier-ignore,对我来说,这首要失掉了运用Prettier的意义。我并不是因为这个来批判Prettier。仅仅他们的意见观念不符合我的需要。

ESLint 混杂

Prettier作为代码格局化东西,只关注代码格局而不会去关注代码逻辑。因此咱们看到,在项目中同时运用 ESLint 和 Prettier 来检查代码是很常见的。假如你自己装备过它们,你可能会注意到它们之间有一些功用是重叠的 — ESLint 也能够用来格局化代码。一般的做法是运用eslint-config-prettier在 ESLint 中禁用这些重复的规则。

对我来说,这种方法造成了许多混乱:

【译】antfu博客:为什么我不必Prettier

另一方面,ESLint 也能够像 Prettier 相同进行代码格局化 — eslint 有更多的装备挑选自在。

备选方案

ESLint 对我来说是确保代码质量必不可少的。由于 ESLint 能够进行代码格局化,所以对我来说最好的挑选是一次装备好 eslint,能够屡次复用装备。因此我花了一些时刻装备我的 ESLint 并将其设置为装备预设。

@antfu/eslint-config

事实证明,设置装备也能够十分少:

npm i -D @antfu/eslint-config
// .eslintrc
{
  "extends": "@antfu"
}

这便是你所需要的装备。@antfu/eslint-config的工作方式与Prettier相似,但尊重你在何时打破界限修正装备的挑选,并供给了许多代码格局化的最佳实践。哦,当然,@antfu/eslint-config是针对我的需求实现的,也很顽固。但也许,它可能是你创建自己的eslint-config版本的一个很好的参考。

总结

这篇文章仅仅在解说我的个人经历和观点。当然,你能够持有不同的观点,彻底不需要同意我的观点。东西有不同的意图和重点,东西没有好坏之分。这仅仅在正确的状况下运用正确的东西。在不需要最大可定制性的用途中,我仍然是 Prettier 的高兴用户,并持续将 ESLint 专门用于项目源代码。

希望这能够让我自己清楚,也许会给你一些见解。干杯!

原文链接

antfu.me/posts/why-n…