vue+webpack 更换主题N种方案优劣分析

2020-06-12 21:06:48易采站长站整理

}
},

优点:

支持动态切换
支持动态色值
不需要内置多份样式

缺点:

业务开发过程中需要对ui给出的色值重定义,业务开发需要有一定的规则
无法修改背景图片
无法对懒加载的样式做处理,需要初始化加载全局所有样式


const ExtractTextPlugin = require('extract-text-webpack-plugin')

// 抽离css
module: {
loaders: [
{//抽离css 通过link加载
test: /.css$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
}
...

plugins: [
new ExtractTextPlugin({
filename: 'css/[name].css'
allChunks: true // 打包所有页面css到同一个css 文件
})
]

无法动态修改背景图片

方式三:编译时多主题全量构建

实现:

定义多套样式
构建时将多套样式主题作为独立构建入口,构建出主题静态文件css文件
业务运行时动态加载不同的主题文件

优点:

支持动态切换主题
业务开发样式分离
编译时构建性能较好 缺点:
构建工具配置较为复杂,适用单入口应用,对多入口的支持不友好
需要定义全局 less 文件,在入口引入
业务需要额外操作

配合 rel=”alternate stylesheet” 可预加载备选主题样式

方式四: 编译时选择性构建

实现:

内置多套皮肤
构建时传入参数,根据不同的构建参数加载不同的主题样式文件

优点:

构建工具配置较为简单,不需要业务做额外操作
多入口应用支持度好

缺点:

不支持动态切换
多个项目需要构建多次,需要构建系统支持

方式五:less动态变量

实现:

修改构建脚本,将所有页面less文件抽到同一个文件中
不编译less,页面直接加载less文件
使用less.js 在客户端编译less 文件


less: {
modifyVars: {},
javascriptEnabled: true
}

优点:

支持动态切换
支持动态色值

缺点:

客户端编译较耗性能/耗时
需要额外加载less.js mini文件size: 131KB

方式六:css变量

实现:

在需要变化的css属性定义变量


:root {
--main-bg-color: pink;
}

body {
background-color: var(--main-bg-color);
}

在运行时动态的修改变量


document.body.style.setProperty('--primary', '#7F583F');