您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
研发都应该了解的如何在vite中接入现代化css工程化方案
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
研发都应该了解的如何在vite中接入现代化css工程化方案
jd****
2024-10-21
IP归属:北京
100浏览
# 背景 好的css工程化方案可以增强我们项目的可维护性、提高样式的复用性、进行自动化处理等,在提高页面加载速度和性能的同时,我们可以有更多的精力进行js逻辑的处理。 # 添加全局样式文件 使用场景: 有一个scss/less文件,此文件中定义了一些全局变量,需要在其他的样式文件中使用,此时需要将这些变量放在全局 ```js // vite.config.ts // 全局 scss 文件的路径 const variablePath = path.resolve("./src/variable.scss"); export default defineConfig({ // css 相关的配置 css: { preprocessorOptions: { scss: { // additionalData 的内容会在每个 scss 文件的开头自动注入 additionalData: `@import "${variablePath}";` } } } }) ``` # CSS Modules CSS Modules 在 Vite 也是一个开箱即用的能力,Vite 会对后缀带有.module的样式文件自动应用 CSS Modules。接下来我们通过一个简单的例子来使用这个功能。 首先,将 Header 组件中的index.scss更名为index.module.scss,然后稍微改动一下index.tsx的内容,如下: ```js // index.tsx import styles './index.module.scss'; export function Header() { return <p className={styles.header}>This is Header</p> }; ``` # PostCSS自动添加css兼容前缀 一般你可以通过 postcss.config.js 来进行 postcss 的配置,不过在 Vite 配置文件中已经提供了 PostCSS 的配置入口,我们可以直接在 Vite 配置文件中进行操作。 首先,我们来安装一个常用的 PostCSS 插件——autoprefixer: ```js pnpm i autoprefixer -D ``` 这个插件主要用来自动为不同的目标浏览器添加样式前缀,解决的是浏览器兼容性的问题。接下来让我们在 Vite 中接入这个插件: ```js // vite.config.ts 增加如下的配置 export default { css: { // 进行 PostCSS 配置 postcss: { plugins: [ autoprefixer({ // 指定目标浏览器 overrideBrowserslist: ['Chrome > 40', 'ff > 31', 'ie 11'] }) ] } } } ``` # 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 插件: ```js pnpm i windicss vite-plugin-windicss -D ``` 随后我们在配置文件中来使用它: ```js // vite.config.ts import windi from "vite-plugin-windicss"; export default { plugins: [ // 省略其它插件 windi() ] } ``` 接着要注意在src/main.tsx中引入一个必需的 import 语句: ```js // main.tsx // 用来注入 Windi CSS 所需的样式,一定要加上! import "virtual:windi.css"; ``` 这样我们就完成了 Windi CSS 在 Vite 中的接入,接下来我们在 Header 组件中来测试,组件代码修改如下: ```js // src/components/Header/index.tsx import { devDependencies } from "../../../package.json"; export function Header() { return ( <div className="p-20px text-center"> <h1 className="font-bold text-2xl mb-2"> vite version: {devDependencies.vite} </h1> </div> ); } ``` # windicss的 attributify 和 shortcuts 除了本身的原子化 CSS 能力,Windi CSS 还有一些非常好用的高级功能,在此我给大家推荐自己常用的两个能力: attributify 和 shortcuts。 要开启这两个功能,我们需要在项目根目录新建windi.config.ts,配置如下: ```js import { defineConfig } from "vite-plugin-windicss"; export default defineConfig({ // 开启 attributify attributify: true, }); ``` 首先我们来看看attributify,翻译过来就是属性化,也就是说我们可以用 props 的方式去定义样式属性,如下所示: ```js <button bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600" text="sm white" font="mono light" p="y-2 x-4" border="2 rounded blue-200" > Button </button> ``` 这样的开发方式不仅可以省去了繁琐的 className 内容,而且还加强了语义化,代码更容易维护,可以说大大提升了开发体验。 shortcuts 用来封装一系列的原子化能力,尤其是一些常见的类名集合,我们在 windi.config.ts来配置它: ```js //windi.config.ts import { defineConfig } from "vite-plugin-windicss"; export default defineConfig({ attributify: true, shortcuts: { "flex-c": "flex justify-center items-center", } }); ``` 比如这里封装了flex-c的类名,接下来我们可以在业务代码直接使用这个类名: ```js <div className="flex-c"></div> <!-- 等同于下面这段 --> <div className="flex justify-center items-center"></div> ```
上一篇:探索Playwright:前端自动化测试的新纪元
下一篇:Taro 鸿蒙技术内幕系列(一):如何将 React 代码跑在 ArkUI 上
jd****
文章数
3
阅读量
0
作者其他文章
01
研发都应该了解的如何在vite中接入现代化css工程化方案
背景好的css工程化方案可以增强我们项目的可维护性、提高样式的复用性、进行自动化处理等,在提高页面加载速度和性能的同时,我们可以有更多的精力进行js逻辑的处理。添加全局样式文件使用场景: 有一个scss/less文件,此文件中定义了一些全局变量,需要在其他的样式文件中使用,此时需要将这些变量放在全局// vite.config.ts// 全局 scss 文件的路径const variablePat
01
微前端父子应用及兄弟应用间组件或方法共享方案
背景我们的很多web应用在持续迭代中功能越来越复杂,参与的人员、团队不断增多,导致项目出现难以维护的问题,这种情况PC端尤其常见,微前端为我们提供了一种高效管理复杂应用的方案。但是在使用微前端的过程中,通常会有一些公共方法或公共组件,本文将对如何实现父子应用以及兄弟应用之间进行方法及组件共享提出几种解决方案以及其各自优缺点及适用场景模块联邦(Module Federation)webpack5引入
01
Monaco Editor使用时右键功能菜单汉化
背景某天产品要求在项目的某个页面添加一个代码编辑器,包含编辑器常见的功能。看完需求,想到了强大的Monaco Editor。按照官方文档进行配置开发,就在自己觉得大功告成之际,右击编辑框,发现功能菜单是英文状态,然后就开启了我的右键功能菜单汉化之路。问题剖析在Monaco Editor的整个使用配置过程中,我没有添加关于本地语言的配置,所以目前使用的应该是默认配置。所以目前解决问题的思路是:1.
jd****
文章数
3
阅读量
0
作者其他文章
01
微前端父子应用及兄弟应用间组件或方法共享方案
01
Monaco Editor使用时右键功能菜单汉化
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号