ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
利用[webpack-theme-color-replacer](https://link.segmentfault.com/?url=https%3A%2F%2Fgithub.com%2Fhzsrc%2Fwebpack-theme-color-replacer)插件,为[ant-design](https://link.segmentfault.com/?url=https%3A%2F%2Fgithub.com%2Fant-design%2Fant-design)实现在运行时动态切换主题色的功能,无需在页面进行less的编译,提升切换速度 利用[webpack-theme-color-replacer](https://github.com/hzsrc/webpack-theme-color-replacer)插件,在webpack构建时提取css中含有主题色的样式规则,生成一个css/theme-colors.css文件。然后在网页运行时,下载这个css文件,动态替换其中的颜色为自定义主题色。 ***** **安装** `npm i -D webpack-theme-color-replacer` **引入插件,修改配置** ``` constThemeColorReplacer\=require("webpack-theme-color-replacer"); const { getThemeColors,modifyVars } \=require("./src/utils/themeUtil"); module.exports\={ configureWebpack:config\=>{ config.plugins.push( newThemeColorReplacer({ fileName:"css/theme-colors-\[contenthash:8\].css", matchColors:getThemeColors(), injectCss:true }) ); }, css:{ loaderOptions:{ less:{ lessOptions:{ modifyVars:modifyVars(), javascriptEnabled:true } } } } } ``` utils目录下新增colors.js和themeUtil.js两个文件 color.js ``` // 蚂蚁设计的调色板计算器 const { generate } \=require("@ant-design/colors"); // 获取 ant design 色系 functiongetAntdColors(color){ return generate(color); } // 获取切换色系 functiongetThemeToggleColors(color){ // 主色系 constmainColors\=getAntdColors(color); constprimary\=mainColors\[10\]; return {primary,mainColors}; } module.exports\={ getAntdColors, getThemeToggleColors }; ``` themeUtil.js ``` constclient\=require("webpack-theme-color-replacer/client"); const { getThemeToggleColors,getAntdColors } \=require("./colors.js"); functiongetThemeColors(color){ const\_color\=color; constreplaceColors\=getThemeToggleColors(\_color); constthemeColors\=\[...replaceColors.mainColors\]; return themeColors; } // 调用插件内的方法 functionchangeThemeColor(newColor){ letpromise\=client.changer.changeColor({newColors:getThemeColors(newColor)}); return promise; } functionmodifyVars(color){ let _color = color; const palettes=getAntdColors(\_color); const primary=palettes\[5\]; return{ "primary-color":primary, "primary-1":palettes\[0\], "primary-2":palettes\[1\], "primary-3":palettes\[2\], "primary-4":palettes\[3\], "primary-5":palettes\[4\], "primary-6":palettes\[5\], "primary-7":palettes\[6\], "primary-8":palettes\[7\], "primary-9":palettes\[8\], "primary-10":palettes\[9\], "info-color":primary, "alert-info-bg-color":palettes\[0\], "alert-info-border-color":palettes\[2\], "processing-color":primary }; } module.exports\={ getThemeColors, changeThemeColor, modifyVars }; ```