【问题标题】:Prettier code formatting of tailwindcss classes bloats the filetailwindcss 类的更漂亮的代码格式使文件膨胀
【发布时间】:2020-09-03 21:49:07
【问题描述】:

在文件中放置代码(graphql/css/js/html)很棒。

我使用 TailwindCSS 库为我的组件设置样式,并使用 classnames 包动态插入类。

我还使用Prettier 来格式化我的代码。问题是它会将我的类规则格式化为每行一个类,这会使我的文件迅速膨胀。

通缉:

const container = cn("flex", "flex-col", "min-h-lg", "mb-12", "transition-opacity", "duration-500", "ease-in-out");
const buttons = cn(
  "inline-grid", "row-gap-5", "col-gap-10", "grid-rows-5", "grid-flow-col",
  "sm:grid", "sm:grid-cols-3",
);
const character = cn(
  "hidden", "row-span-5", "h-48", "place-self-end", "origin-center",
  "animation-once", "animation-ease-out", "animation-0.8s", "animation-fill-forwards",
  "sm:block", "sm:animation-lightspeedin",
);

我得到的更漂亮:

const container = cn(
  "flex",
  "flex-col",
  "min-h-lg",
  "mb-12",
  "transition-opacity",
  "duration-500",
  "ease-in-out"
);
const buttons = cn(
  "inline-grid",
  "row-gap-5",
  "col-gap-10",
  "grid-rows-5",
  "grid-flow-col",
  "sm:grid",
  "sm:grid-cols-3"
);
const character = cn(
  "hidden",
  "row-span-5",
  "h-48",
  "place-self-end",
  "origin-center",
  "animation-once",
  "animation-ease-out",
  "animation-0.8s",
  "animation-fill-forwards",
  "sm:block",
  "sm:animation-lightspeedin"
);

如您所见,它很快就会失控。 我想知道其他具有类似堆栈的人正在做什么来保持他们的文件可读。我一直在努力寻找少于 100 行的文件,但是使用 prettier+tailwindcss 已经不可能了。 我会选择prettier-ignore-{start,end} if that was supported on js/jsx/ts/tsx files。 你忽略每一条规则吗?

// prettier-ignore
const container = cn("flex", "flex-col", "min-h-lg", "mb-12", "transition-opacity", "duration-500", "ease-in-out");
// prettier-ignore
const buttons = cn(
  "inline-grid", "row-gap-5", "col-gap-10", "grid-rows-5", "grid-flow-col",
  "sm:grid", "sm:grid-cols-3",
);
// prettier-ignore
const character = cn(
  "hidden", "row-span-5", "h-48", "place-self-end", "origin-center",
  "animation-once", "animation-ease-out", "animation-0.8s", "animation-fill-forwards",
  "sm:block", "sm:animation-lightspeedin",
);

或者您是否将所有类移动到文件底部以使其不那么明显/减少滚动以获取组件的需要? 我想我会同时做这两件事,并在prettier-ignore-{start,end} 可用时将它们移回文件顶部。

【问题讨论】:

  • 我很确定这不是更漂亮的规则,它的 eslint。
  • 为此使用多行是 imo 最好的方法。从上到下清晰易读。添加或删除一个类时,您可以确切地看到它在 Git 中是哪个类,而不是 Git 说整行被替换。
  • 我真的想在 TailwindCSS 中使用 @apply 规则每行一个类,但我不知道该怎么做。

标签: reactjs prettier tailwind-css colocation


【解决方案1】:

我认为 Prettier 无法改变这一点。这是很自以为是的,而且有充分的理由。您可以调整的越少,它就越能保留您的代码(大部分时间)。我认为 Prettier 的分支允许更多的定制,但老实说,我有一个更简单的解决方案给你。像这样添加你的类:

const container = cn("flex flex-col min-h-lg mb-12 transition-opacity");

const buttons = cn(
  "inline-grid row-gap-5 col-gap-10 grid-rows-5 grid-flow-col",
  "sm:grid sm:grid-cols-3",
);

const character = cn(
  "hidden row-span-5 h-48 place-self-end origin-center",
  "animation-once animation-ease-out animation-0.8s animation-fill-forwards",
  "sm:block sm:animation-lightspeedin",
);

【讨论】:

  • 这会引发错误“[tsserver 2345] [E] '...' 类型的参数不可分配给 'TArg' 类型的参数。
  • 啊 - 看起来对您添加的类字符串进行了一些类型检查。您可以调整输入以使用 TypeScript 4 的新功能进行部分字符串匹配。我一直在使用 clsx 而不是类名,到目前为止我还没有遇到过这个问题。
猜你喜欢
  • 1970-01-01
  • 2023-02-19
  • 2020-06-28
  • 2018-04-22
  • 2020-07-04
  • 1970-01-01
  • 2021-08-31
  • 2023-02-19
  • 2019-08-24
相关资源
最近更新 更多