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

webpack構建換膚功能的思路詳解

 更新時間:2017年11月27日 14:14:57   投稿:mrr  
這篇文章主要介紹了webpack構建下?lián)Q膚功能的思路詳解,需要的朋友可以參考下

最近項目中要實現(xiàn)一個換膚的功能,大體想了下,記錄一下思路

要實現(xiàn)換膚功能,目標就是打包生成多份皮膚文件,需要哪個就用哪個

打包生成多份皮膚文件因為項目是使用webpack構建的,要想生成多份css文件,就要在入口中配置多個入口文件,每個入口文件會提取出一個css文件

config.entry={
 app: ['./src/app.js'],
 defaultTheme: ['./src/theme.default.color.js'],
 orangeTheme:['./src/theme.orange.color.js'],
 blueTheme:['./src/theme.blue.color.js'],
}

app.js中

 import "./app.styl" //整個項目的樣式,在各種皮膚下都保持不變的那部分
theme.blue.color.js 藍色皮膚js文件
import "./theme/blue.styl"

blue.styl 藍色皮膚

@require "./css/skinTheme/var.blue" //樣式變量,整體為藍色風格的顏色值
@require "./css/skinTheme/theme.color" //提取出來的需要換膚的那部分樣式如代碼所示,幾個主題js文件中只是單純的

引入了相應的皮膚樣式文件,這樣,webpack打包后就會生成幾個無用的js文件和一系列皮膚樣式文件

到這一步,就得到了需要的皮膚文件,但是需要注意的是,webpack會將生成的js、css路徑插入到模板html中,所以,我們打開構建后生成index.html會看到

<html>
 <head>
  <link rel="stylesheet" href="app.xxxx.css" rel="external nofollow" rel="external nofollow" >
  <link rel="stylesheet" href="defaultTheme.xxxxx.css" rel="external nofollow" >
  <link rel="stylesheet" href="orangeTheme.xxxxx.css" rel="external nofollow" >
  <link rel="stylesheet" href="blueTheme.xxxxx.css" rel="external nofollow" >
 </head>
 <body>
  <script src="app.xxxx.js"></script>
  <script src="defaultTheme.xxxx.js"></script>
  <script src="orangeTheme.xxxx.js"></script>
  <script src="blueTheme.xxxx.js"></script>
 </body>

</html>操作index.html接下來就需要操作打包后的index.html,將多余的js引用刪掉,將皮膚路徑提取出來,然后將皮膚引用刪掉也就是要改成這樣的文件

/build/index.html
<html>
 <head>
  <script>
   window.cssUrls={
    "defaultTheme":"/defaultTheme.4bdb738cdc062e7842ce.css",
    "orangeTheme":"/orangeTheme.4bdb738cdc062e7842ce.css","blueTheme":"/blueTheme.4bdb738cdc062e7842ce.css"
   }
  </script>
  <link rel="stylesheet" href="app.xxxx.css" rel="external nofollow" rel="external nofollow" >
 </head>
 <body>
  <script src="app.xxxx.js"></script>
 </body>
</html>可以寫這樣一個操作文件的函數(shù)
cssExtract.js
const DISTPATH = 'build/index.html'
const cheerio = require('cheerio')
const fs = require('fs')
const chalk = require('chalk')
const prefix = ['defaultTheme', 'orangeTheme', 'blueTheme']
const cssUrls = {}
function extractCss() {
 fs.readFile(DISTPATH, 'utf8', (err, data) => {
  if (err) {
   throw err
  }
  const $ = cheerio.load(data)
  /**
   * 刪除所有主題css,相關鏈接保存在window.cssUrls中
   */
  $('link').each((index, item) => {
   const href = $(item).attr('href')
   for (const val of prefix) {
    if (href.indexOf(val) !== -1) {
     cssUrls[val] = href
     $(item).remove()
    }
   }
  })
  /**
   * 刪除無用的js
   */
  $('script').each((index, item) => {
   const src = $(item).attr('src')
   for (const val of prefix) {
    if (src && src.indexOf(val) !== -1) {
     $(item).remove()
    }
   }
  })
  //插入行內(nèi)js
  $('base').after(`<script>window.cssUrls=${JSON.stringify(cssUrls)}</script>`)
  fs.writeFile(DISTPATH, $.html(), err => {
   if (err) {
    throw err
   }
   console.log(chalk.cyan('extract css url complete.\n'))
  })
 })
}

extractCss()最后到這里,運行 webpack && node cssExtract.js,index.html就變成上面期望的那樣,我們得要了皮膚文件的一個mapping,并保存在window.cssUrls中,接下來,通過切換按鈕的方式切換皮膚還是什么其他的就可以自由發(fā)揮了.
需要說明的是,換膚功能的重點是對樣式的重構,將需要換膚的所有樣式提取到一起,通過變量來設置不同的主題

總結

以上所述是小編給大家介紹的webpack構建下?lián)Q膚功能的實現(xiàn)思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Typescript定義多個接口類型聲明的方式小結

    Typescript定義多個接口類型聲明的方式小結

    這篇文章主要介紹了Typescript定義多個接口類型聲明的方式小結,在 TypeScript 中,您可以使用交叉類型(&)或聯(lián)合類型(|)來組合多個接口,從而實現(xiàn)多個接口類型的混合,文中通過代碼講解的非常詳細,需要的朋友可以參考下
    2025-01-01
  • 復制js對象方法(詳解)

    復制js對象方法(詳解)

    復制js對象方法,需要的朋友可以參考下
    2013-07-07
  • JS操作JSON要領詳細總結

    JS操作JSON要領詳細總結

    JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的 API 或工具包,下面與大家分享下JSON操作的相關知識
    2013-08-08
  • javascript實現(xiàn)頁面滾屏效果

    javascript實現(xiàn)頁面滾屏效果

    本文主要介紹了javascript實現(xiàn)頁面滾屏效果的方法,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Bootstrap Modal遮罩彈出層(完整版)

    Bootstrap Modal遮罩彈出層(完整版)

    Bootstrap modal是給外層添加固定fixed,然后內(nèi)容使用自適應靠上居中方式。今天分享的這篇文章正是這種方式,感興趣的朋友一起看看吧
    2016-11-11
  • extjs4圖表繪制之折線圖實現(xiàn)方法分析

    extjs4圖表繪制之折線圖實現(xiàn)方法分析

    這篇文章主要介紹了extjs4圖表繪制之折線圖實現(xiàn)方法,結合實例形式分析了extjs4繪制折線圖的相關操作技巧、實現(xiàn)方法與相關注意事項,需要的朋友可以參考下
    2020-03-03
  • js計算兩個日期間的天數(shù)月的實例代碼

    js計算兩個日期間的天數(shù)月的實例代碼

    本文通過實例代碼給大家介紹了基于js計算兩個日期間的天數(shù)月,文中還通過一段代碼給大家簡單說明了js計算兩個日期差的方法,感興趣的朋友跟隨小編一起看看吧
    2018-09-09
  • JavaScript查看代碼運行效率console.time()與console.timeEnd()用法

    JavaScript查看代碼運行效率console.time()與console.timeEnd()用法

    今天小編就為大家分享一篇關于JavaScript查看代碼運行效率console.time()與console.timeEnd()用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JS如何實現(xiàn)form表單登錄驗證并使用MD5加密詳解

    JS如何實現(xiàn)form表單登錄驗證并使用MD5加密詳解

    表單驗證為終端用戶檢測無效的數(shù)據(jù)并標記這些錯誤,是一種用戶體驗的優(yōu)化,下面這篇文章主要給大家介紹了關于JS如何實現(xiàn)form表單登錄驗證并使用MD5加密的相關資料,需要的朋友可以參考下
    2023-06-06
  • JS 排序輸出實現(xiàn)table行號自增前端動態(tài)生成的tr

    JS 排序輸出實現(xiàn)table行號自增前端動態(tài)生成的tr

    一個項目,需要對數(shù)據(jù)進行排序輸出,要求有行號,依次遞增1.2.3.4.5,使用前端動態(tài)生成的tr
    2014-08-08

最新評論

左贡县| 东乌| 湟源县| 贵州省| 山丹县| 宾川县| 安塞县| 姜堰市| 阿克| 林甸县| 上高县| 太和县| 横峰县| 冕宁县| 巩义市| 布尔津县| 饶平县| 江北区| 凤凰县| 绥芬河市| 天气| 瑞昌市| 余姚市| 成武县| 连江县| 玉林市| 黑水县| 桂平市| 雷州市| 南昌县| 平阳县| 永春县| 密云县| 左权县| 乌拉特前旗| 灵川县| 工布江达县| 兴国县| 南投市| 吉木乃县| 阳新县|