Vue 进阶(七十一):webpack 插件实现自动抽取 css 主题色样式一键切换
一、前言
项目应用element-ui
,有切换主题色的需要。但官方的方式,有几个问题:
1、需要下载整个
element-ui
的样式css
,并替换其中的css
样式颜色。文件较大,下载慢且影响性能。2、只能替换
element-ui
本身的颜色样式,项目中自己写的颜色样式替换不掉。3、全部的
element-ui
样式都重新覆盖,渲染较慢,且容易导致覆盖已有样式出现意外问题。
其实带颜色的样式规则只占了所有css
中很少的一部分。所以,我希望可以只替换css
中与颜色相关的部分css
规则。于是写了个webpack
插件来实现这个功能。
二、基本思路
webpack
构建时,在emit
事件(准备写入dist
结果文件时)中,将即将生成的所有css
文件的内容中带有指定颜色的css
规则单独提取出来,再合并为一个theme-colors.css
输出文件。然后在切换主题色时,下载这个文件,并替换为需要的颜色,应用到页面上。这样,下载的样式中就只包含颜色相关的
css
规则,文件较小;同时它已经包含了项目中所有的css
中的指定颜色样式,一次下载全部颜色样式都搞定。
经过反复测试,实现的效果比较理想。而且还可以根据需要,替换掉任意数目的颜色。理论上是只要是css
的颜色,都可以通过这个插件来提取颜色样式。
三、实施方法
下载依赖包,执行命令
npm i -D webpack-theme-color-replacer
修改配置文件
webpack.base.conf.js
,修改内容如下:
页面配置,配置内容如下:
四、优化
提醒:若需要进行颜色替换的页面较多,可考虑将颜色替换组件设置为全局自定义组件。实现方式如下:
在
main.js
中全局注册到vue
中
在需要的组件中可以直接使用,注意需要父子传值
注:在进行主体色变换时,若需要替换的主体色较多时,在初始化新的主体色数组时,应新增相应数量的色彩元素。否则,匹配的主体色不会生效。
效果:http://test.hz300.com/webpack4/themeColor.html
五、拓展阅读
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/0396e6e7a837dfcf129572aa6】。文章转载请联系作者。
评论