This plugin can extract theme color styles from all the outputed css files (such as element-ui theme colors), and make a 'theme-colors.css' file which only contains color styles. At runtime in your web page, the client part will help you to download this css file, and then replace the colors into new customized colors dynamicly.
This is a sample:
https://hzsrc-vue-webpack4-elementui.netlify.com/themeColor.html
Implementation (Chinese):
https://segmentfault.com/a/1190000016061608
1.Install
npm i -D webpack-theme-color-replacer
2.Cofig for webpack
const ThemeColorReplacer = require('webpack-theme-color-replacer')
module.exports = {
...,
plugins: [
new ThemeColorReplacer({
fileName: 'css/theme-colors-[contenthash:8].css',
matchColors: ['#ed4040', '#4b0'],
resolveCss(resultCss) {
return resultCss.replace(/#4b0/g, '#ed4040')
},
externalCssFiles: ['./node_modules/element-ui/lib/theme-chalk/index.css'],
changeSelector(cssSelector) {
return cssSelector
},
isJsUgly: process.env.NODE_ENV !== 'development',
})
],
}
You can view this sample:
https://github.com/hzsrc/vue-element-ui-scaffold-webpack4/blob/master/build/webpack.base.conf.js
3.Usage in your web page
Like this:
import replacer from 'webpack-theme-color-replacer/client';
export function changeColor(newColor) {
var options = {
newColors: [newColor, newColor],
};
replacer.changer.changeColor(options, Promise).then(() => {
console.log('Theme colors changed!');
});
}
You can view this sample:
https://github.com/hzsrc/vue-element-ui-scaffold-webpack4/blob/master/src/js/themeColorClient.js
issues report
If you have issues with this plugin, please run your command with --theme_debug
option, such as npm run dev --theme_debug
, then upload the outputed _tmp_xxx
files while reporting issues. Thanks!