最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于webpack4+vue-cli3項目實現(xiàn)換膚功能

 更新時間:2019年07月17日 09:09:30   作者:webScript  
這篇文章主要介紹了基于webpack4+vue-cli3項目的換膚功能,文中是通過scss+style-loader/useable做換膚功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

起因

最近因公司需求,需要實現(xiàn)主題換膚功能,不僅僅是顏色的更改,還需要包括圖片,字體等文件等更換,因此在百度里各種實現(xiàn)方案后,決定根據(jù)scss+style-loader/useable做換膚。

項目開始

首先我們用vue-element-admin這個開源的后臺管理系統(tǒng)項目來做demo演示,為了便于做二次開發(fā),下載vue-admin-template來開發(fā)。

// 從github下載vue-admin-template
clone https://github.com/PanJiaChen/vue-admin-template.git
cd vue-admin-template
npm install
npm run dev

運行成功后的效果

安裝style-loader處理器

因為vue-admin-template項目是添加過sass-loader依賴的,所以不用我們再次安裝,在上一步就已經(jīng)安裝好了。

npm install style-loader --save-dev

創(chuàng)建主題文件

在src目錄下創(chuàng)建theme-chalk、theme-light主題文件夾
在兩個主題目錄下創(chuàng)建index.useable.scss文件 

index.useable.scss中寫入樣式

// theme-chalk/index.useable.scss
body {
  background: red; 
}
// theme-light/index.useable.scss
body {
  background: green; 
}

到此,我們的主題樣式都已經(jīng)建好了,現(xiàn)在要將主題應(yīng)用上去

在vue.config.js中增加style-loader/useable

vue-cli2根vue-cli3的配置區(qū)別還是挺大的,我在配置的過程中遇到很多坑,因為vue-cli3沒有了webpack.config.js文件,我們在配置webpack的時候無法根據(jù)老文檔來配置,需要熟悉cli3的webpack-chain來鏈式修改配置,但是文檔很少,配置的過程中異常困難。

在配置文件中chainWebpack鏈式修改webpack配置就能成功應(yīng)用loader了,話不多說,直接上代碼,

// 換膚loader
  const scss = config.module.rule('scss').toConfig();
  const useable = { ...scss.oneOf[3], test: /\.useable.scss$/ };
  useable.use = [...useable.use];
  useable.use[0] = { loader: 'style-loader/useable' };
  config.module.rule('scss').merge({ oneOf: [useable] });

使用主題

在準備工作都做好后,接下來我們開始使用主題樣式。

之前說的為什么要用style-loader來做換膚呢?是因為style-loader提供了useable這一API,可動態(tài)加載刪除link文件。具體詳情請自行去看看style-loader。

在src目錄下,創(chuàng)建theme.js文件

const cache = {};
const themeAction = {
 chalk() {
  if (!cache.chalk) {
   cache.chalk = import('./styles/theme-chalk/index.useable.scss');
  }
  return cache.chalk;
 },
 light() {
  if (!cache.light) {
   cache.light = import('./styles/theme-light/index.useable.scss');
  }
  return cache.light;
 }
};
let current = null;
async function setTheme(theme) {
 if (themeAction[theme]) {
  const style = await themeAction[theme]();
  if (current) {
   current.unref();
  }
  style.ref();
  current = style;
 }
}
window.setTheme = setTheme;
export default setTheme;

在main.js中,引入theme.js。

import setTheme from './theme'
// 使用主題
setTheme('chalk')

重啟服務(wù),查看效果


在實際項目中,可根據(jù)傳入的主題(chalk/light),動態(tài)切換主題色,同時也可根據(jù)業(yè)務(wù)需求,創(chuàng)建多個主題。我們只需要在index.useable.scss文件中寫樣式變量即可。

總結(jié)

以上所述是小編給大家介紹的基于webpack4+vue-cli3項目實現(xiàn)換膚功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • vue父組件異步傳遞props值,子組件接收不到解決方案

    vue父組件異步傳遞props值,子組件接收不到解決方案

    這篇文章主要介紹了vue父組件異步傳遞props值,子組件接收不到解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中的v-slot指令使用

    vue中的v-slot指令使用

    在Vue中, v-slot 指令用于定義插槽的模板內(nèi)容,v-slot 指令可以用于標簽或組件標簽上,以便在子組件中使用插槽,這篇文章主要介紹了vue v-slot指令,需要的朋友可以參考下
    2023-08-08
  • vue管理系統(tǒng)項目中的一些核心技能匯總

    vue管理系統(tǒng)項目中的一些核心技能匯總

    Vue是當今增長最快的前端框架,Vue 平易近人、用途廣泛且性能卓越,它的語法非常直觀,并且具有友好的學(xué)習(xí)曲線,是開發(fā)人員最想學(xué)習(xí)的頂級前端庫之一,下面這篇文章主要給大家介紹了關(guān)于vue管理系統(tǒng)項目中的一些核心技能,需要的朋友可以參考下
    2022-05-05
  • vue項目動態(tài)渲染input,綁定的參數(shù)不實時更新問題

    vue項目動態(tài)渲染input,綁定的參數(shù)不實時更新問題

    這篇文章主要介紹了vue項目動態(tài)渲染input,綁定的參數(shù)不實時更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 關(guān)于vue.extend和vue.component的區(qū)別淺析

    關(guān)于vue.extend和vue.component的區(qū)別淺析

    最近工作中遇到了vue.extend,vue.component,但二者之間的區(qū)別與聯(lián)系是什么呢?下面這篇文章主要給大家介紹了關(guān)于vue.extend和vue.component區(qū)別的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • element?Drawer?抽屜無法渲染問題及解決

    element?Drawer?抽屜無法渲染問題及解決

    這篇文章主要介紹了element?Drawer?抽屜無法渲染問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue3集成electron的過程

    vue3集成electron的過程

    本文詳細介紹了如何在Vue3項目中集成Electron,包括安裝electron和electron-builder兩個依賴,以及配置.npmrc文件和手動修改鏡像源的方法,整個過程詳細記錄了從創(chuàng)建項目、安裝依賴、修改配置、到最終打包部署的每一步
    2024-10-10
  • 基于vue實現(xiàn)探探滑動組件功能

    基于vue實現(xiàn)探探滑動組件功能

    這篇文章主要介紹了基于vue實現(xiàn)探探滑動組件功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 完美解決vue 中多個echarts圖表自適應(yīng)的問題

    完美解決vue 中多個echarts圖表自適應(yīng)的問題

    這篇文章主要介紹了完美解決vue 中多個echarts圖表自適應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue集成百度地圖實現(xiàn)位置選擇功能

    Vue集成百度地圖實現(xiàn)位置選擇功能

    由于添加門店時,需要選擇門店的省、市、區(qū)、詳細地址、以及門店的經(jīng)緯度信息,本文給大家分享Vue集成百度地圖實現(xiàn)位置選擇功能,感興趣的朋友一起看看吧
    2022-06-06

最新評論

临安市| 呼和浩特市| 深泽县| 伊金霍洛旗| 瑞丽市| 左云县| 屏边| 昆山市| 万盛区| 日喀则市| 弥勒县| 襄城县| 涿州市| 丹棱县| 英超| 肥西县| 哈尔滨市| 阿克陶县| 丽水市| 井研县| 杭锦旗| 建宁县| 田阳县| 和静县| 元谋县| 宁南县| 岑溪市| 隆林| 酒泉市| 六安市| 民县| 西乌珠穆沁旗| 延长县| 林周县| 巫溪县| 镇远县| 宾川县| 桃源县| 赫章县| 丹阳市| 克山县|