研发都应该了解的如何在 vite 中接入现代化 css 工程化方案
作者:京东物流 刘微微
背景
好的 css 工程化方案可以增强我们项目的可维护性、提高样式的复用性、进行自动化处理等,在提高页面加载速度和性能的同时,我们可以有更多的精力进行 js 逻辑的处理。
添加全局样式文件
使用场景: 有一个 scss/less 文件,此文件中定义了一些全局变量,需要在其他的样式文件中使用,此时需要将这些变量放在全局
CSS Modules
CSS Modules 在 Vite 也是一个开箱即用的能力,Vite 会对后缀带有.module 的样式文件自动应用 CSS Modules。接下来我们通过一个简单的例子来使用这个功能。
首先,将 Header 组件中的 index.scss 更名为 index.module.scss,然后稍微改动一下 index.tsx 的内容,如下:
PostCSS 自动添加 css 兼容前缀
一般你可以通过 postcss.config.js 来进行 postcss 的配置,不过在 Vite 配置文件中已经提供了 PostCSS 的配置入口,我们可以直接在 Vite 配置文件中进行操作。
首先,我们来安装一个常用的 PostCSS 插件——autoprefixer:
这个插件主要用来自动为不同的目标浏览器添加样式前缀,解决的是浏览器兼容性的问题。接下来让我们在 Vite 中接入这个插件:
CSS 原子化框架
在目前的社区当中,CSS 原子化框架主要包括 Tailwind CSS 和 Windi CSS。Windi CSS 作为前者的替换方案,实现了按需生成 CSS 类名的功能,开发环境下的 CSS 产物体积大大减少,速度上比 Tailwind CSS v2 快 20~100 倍!当然,Tailwind CSS 在 v3 版本也引入 JIT(即时编译) 的功能,解决了开发环境下 CSS 产物体积庞大的问题,但这也是后来的事情了。接下来我们还是选择 Windi CSS 作为 CSS 原子化框架来接入到 Vite 中。
首先安装 windicss 及对应的 Vite 插件:
随后我们在配置文件中来使用它:
接着要注意在 src/main.tsx 中引入一个必需的 import 语句:
这样我们就完成了 Windi CSS 在 Vite 中的接入,接下来我们在 Header 组件中来测试,组件代码修改如下:
windicss 的 attributify 和 shortcuts
除了本身的原子化 CSS 能力,Windi CSS 还有一些非常好用的高级功能,在此我给大家推荐自己常用的两个能力: attributify 和 shortcuts。
要开启这两个功能,我们需要在项目根目录新建 windi.config.ts,配置如下:
首先我们来看看 attributify,翻译过来就是属性化,也就是说我们可以用 props 的方式去定义样式属性,如下所示:
这样的开发方式不仅可以省去了繁琐的 className 内容,而且还加强了语义化,代码更容易维护,可以说大大提升了开发体验。
shortcuts 用来封装一系列的原子化能力,尤其是一些常见的类名集合,我们在 windi.config.ts 来配置它:
比如这里封装了 flex-c 的类名,接下来我们可以在业务代码直接使用这个类名:
版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/dfa20840f7412cb6d696bf4c2】。文章转载请联系作者。
评论