00:00:00对于我目前正在进行的一些新项目,准确地说是大部分新项目,
00:00:05我已经不再使用 Tailwind 了。在这些新项目中我不再使用它,
00:00:11因此也不再使用 Shadcn。这其中是有原因的。当然,原因并不是说 Tailwind 不好,
00:00:18恰恰相反,它是一个非常棒的库。我想先明确这一点。
00:00:22其实做这一期视频我心里也有些纠结,因为
00:00:27就在几周前,我还在谈论 Tailwind 当时面临的巨大财务危机。
00:00:32谢天谢地,从那以后情况大有好转,许多新赞助商加入了。我想
00:00:38他们现在的财务状况已经好多了。毕竟 Tailwind 真的很出色。
00:00:43而且有很多开发者在全身心地为这个项目投入精力。我并不是想说
00:00:49它不好,或者想说服大家不要用它。我只是利用这个频道来
00:00:56分享我的想法、观点以及我对工作方式的一些见解。所以我觉得这可能会
00:01:01很有意思。那么,既然我觉得 Tailwind 很棒,为什么现在不用了呢?这得从头说起。
00:01:07几年前,在 AI 革命爆发前,或者说在 AI 还没这么擅长写代码之前,
00:01:15我和大多数开发者一样,到处都在用 Tailwind。不过,
00:01:21当时最主要的原因是它能让我快速迭代代码。我从来没真正用过 Figma
00:01:28或者类似的工具。当然,也是因为我大多数时候都是一个人工作。
00:01:34如果我独自开发项目,其实没必要使用那些设计工具。对我来说,
00:01:40直接在代码中迭代设计总是更快。我可以边写代码边调整。
00:01:45使用 Tailwind,由于类名是直接内联在 DOM 或 JSX 代码里的,你可以
00:01:50快速更新代码、修改样式,尝试不同的效果。比如微调一下外边距。
00:01:57那是一个非常、非常高效的工作流。这是我当时使用的主要原因,
00:02:04可能也是其他一些开发者的原因。但我知道对于相当一部分开发者,
00:02:10甚至是大多数人来说,另一个强有力的理由是他们讨厌 CSS。我知道 CSS
00:02:17在 Web 开发者中并不受欢迎。我能理解,因为它看起来很复杂,有成百上千个
00:02:23属性和值。没错,确实挺让人头大的。不过我也得说,现代 CSS
00:02:31已经进步了很多。现在的许多操作都比过去容易了。虽然 Flexbox 已经
00:02:37不算是新鲜事物了,但它确实简化了很多工作。再看看 Flexbox 以外的其他领域,
00:02:44获取衍生颜色也比以前容易得多,现在 CSS 已经有了相对颜色(Relative Colors)。
00:02:51顺便提一下,我在 Academind 频道发布过几期视频,专门讨论了现代浏览器
00:02:55和 CSS 的新特性,比如颜色、相对颜色,还有容器查询(Container Queries),它在构建
00:03:01动态缩放组件时非常有用,因为它不依赖视口,而是取决于组件可用的空间。
00:03:08所以 CSS 确实进步巨大。问题是,你基本上也可以在 Tailwind 中使用所有这些
00:03:14现代 CSS 特性,但你也可以直接写原生 CSS。而且现在有了 AI,
00:03:23写原生 CSS 变得更容易了。即使你讨厌写 CSS,只要了解某些特性
00:03:28及其浏览器支持情况就足够了。你可以引导 AI 使用你想要的特性,
00:03:34给它一些文档或解释这些特性的 MDN 文章,AI 就能帮你写好代码。你可能会问,
00:03:39为什么要这么麻烦?为什么不直接用 Tailwind?它不也支持这些现代特性吗?
00:03:45对我来说,大概有“一个半”理由。
00:03:51次要的原因是 Tailwind 并不总能支持所有最新特性。
00:03:58更重要的一点是,AI 肯定不了解所有的 Tailwind 特性。Tailwind 的功能很多,
00:04:05但 AI 并不会全部用上。它总是反复使用那几个类,甚至经常使用旧的类语法,
00:04:13这会导致你错过某些新功能。当然,如果你用原生 CSS,同样的问题也可能发生。
00:04:17如果你不告诉 AI 使用特定的特性,它可能就不会用。但你可以学习几个
00:04:22最重要的 CSS 特性,然后让 AI 去实现。当然,我也明白,
00:04:29你同样可以告诉 AI 使用特定的 Tailwind 特性。也许直接说出几个 CSS 核心特性
00:04:34要比说出 Tailwind 的类名更容易。但再次重申,这并不是我的核心观点。
00:04:40我的核心观点是,我一直在努力减少项目中使用的库的数量,
00:04:48原因有两个。首先,我从事教育内容创作,所以我习惯于
00:04:53把外部库或额外的库视为负担。因为如果我制作一门关于 React 的课程,
00:05:01而课程中又使用了 Tailwind,一旦 Tailwind 发生了破坏性更新,
00:05:07我的代码或课程中的很多部分就会突然失效,从而导致学生提出大量问题,
00:05:12即便 React 这个主线内容并没有任何变化。我明白这只是影响我的一个
00:05:17非常小众的问题,不适用于大多数网站。但即使是构建一个普通的网站,
00:05:23我也认为尽可能少地、合理地使用第三方库是个好主意。
00:05:29当然,我并不是说要极端地排斥每一个库。使用某些库是有充分理由的。
00:05:38比如,如果你在做一个功能丰富的富文本编辑器,使用 Tiptap 之类的库
00:05:44就非常有意义,因为完全手写编辑器太难了。虽说现在有了 AI,
00:05:50在某种程度上比以前容易了,但你还是会遇到很多必须亲自解决的边界情况或问题。
00:05:54即便有 AI 帮忙,它也不是每次都能做对。用过的人都知道。
00:05:59所以,使用第三方库是有理由的。我只是想说,正如我刚才解释的,
00:06:06样式其实是完全可以被替代的部分。我并不是说每个人都应该这么做,
00:06:11但对我来说效果很好。因此,这是一个我可以去掉的库,
00:06:16因为我不介意去审查 AI 给出的 CSS 代码,也不介意在出问题时用原生 CSS
00:06:21去修复样式问题。因为使用 AI 时,总归会有出状况的时候。
00:06:28但我不在乎。如果你非常讨厌看 CSS 代码,那这对你来说
00:06:37显然不是一个选项。但对我而言,我可以因此摆脱 Tailwind。我也可以
00:06:44摆脱 Shadcn,因为我可以构建自己的组件。Shadcn 虽然不是
00:06:50传统意义上的库,但它底层使用了 Radix UI,而据我所知,
00:06:56这个库现在的维护状态存在疑问。这就是为什么即使抛开教学因素,
00:07:00我也想避免使用过多库的真实原因。你添加到项目中的每一个库,
00:07:08一旦停止维护,都可能变成一种负担。到那时,安全漏洞可能无人修复,
00:07:16Bug 也会被搁置。比如 Tailwind 的样式 Bug。新特性也不会再增加了。
00:07:21如果出现了一个新的 CSS 特性而 Tailwind 不再维护了——当然它现在维护得很好——
00:07:29但如果它真的不再维护,你就可能永远无法直接使用那个特性。我们离那种情况其实挺近的。
00:07:35在我之前做的那个谈论他们财务问题的视频里,Tailwind 的创始人发过一贴,
00:07:41说如果他们解决不了这个融资问题,Tailwind 可能会变成“弃置软件”。
00:07:46也许那话说得有点重,或者只是为了博取关注。但不管怎么说,
00:07:52大多数第三方库都有一个共同的问题,就是取决于开发者个人,未来可能不再维护。
00:07:58这就是为什么我个人重新倾向于使用原生 CSS,这一点很重要。我以前一直也是这么做的。
00:08:03我必须再次强调,我祝愿 Tailwind 发展得越来越好,而且我在很多项目中
00:08:11依然在使用它。并不是说我讨厌它,只是我在一些项目中尝试
00:08:17不再使用它。无论对你来说那是 Tailwind 还是别的什么工具,
00:08:22我都会建议——这在 AI 时代之前也是真理——在引入第三方库之前要三思。
00:08:28使用它们有很多好理由,比如用于身份验证的 Better Auth 就非常棒,我肯定会用。
00:08:35但如果是一个可以被替代的库,我觉得值得重新审视或考虑一下。
00:08:41with not using it in some projects. And no matter if that's Tailwind for you or something totally
00:08:46different, I just would – and that was true before the AI era too – I would always consider twice
00:08:53before using a third-party library. There are many good reasons to use them. For example, better auth
00:08:57for authentication is amazing. I would definitely do that. But if there is a library you can replace,
00:09:04it might be worth a second look or thought, I guess.