欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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()
    }
   }
  })
  //插入行內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)站的支持!

相關文章

  • JS實現(xiàn)多選框的操作

    JS實現(xiàn)多選框的操作

    這篇文章主要為大家詳細介紹了JS實現(xiàn)多選框的操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • js播放wav文件(源碼)

    js播放wav文件(源碼)

    如何用JS播放wav文件,理論上用js在網(wǎng)頁里嵌入一個window播放器的插件,可以播放的。,不過通用性不是很好,IE下可以用,感興趣的朋友可以參考下哈本文
    2013-04-04
  • JS保留兩位小數(shù) 四舍五入函數(shù)的小例子

    JS保留兩位小數(shù) 四舍五入函數(shù)的小例子

    這篇文章主要介紹了JS保留兩位小數(shù) 四舍五入函數(shù)的小例子,有需要的朋友可以參考一下
    2013-11-11
  • javascript實現(xiàn)最長公共子序列實例代碼

    javascript實現(xiàn)最長公共子序列實例代碼

    最長公共子序列(longest common sequence)和最長公共子串(longest common substring)不是一回事兒,下面這篇文章主要給大家介紹了關于javascript實現(xiàn)最長公共子序列的相關資料,需要的朋友可以參考下。
    2018-02-02
  • Javascript 自定義類型方法小結

    Javascript 自定義類型方法小結

    Javascript 常用自定義類型方法整理,需要的朋友可以參考下。
    2010-03-03
  • JavaScript模板入門介紹

    JavaScript模板入門介紹

    我最開始寫過一個富交互的頁面,其中的JavaScript代碼包含了很多html標簽
    2012-09-09
  • jQuery Mobile動態(tài)刷新頁面樣式的實現(xiàn)方法

    jQuery Mobile動態(tài)刷新頁面樣式的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨Query Mobile動態(tài)刷新頁面樣式的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript中的Promise詳解

    JavaScript中的Promise詳解

    現(xiàn)在網(wǎng)上有非常多的Promise文章,但都是給你一堆代碼,或者某些核心代碼,讓你看完之后感覺,嗯,很厲害,但還是不知所云,不知其所以然。那么本文真正從一個小白開始帶你深入淺出,一步一步實現(xiàn)自己的 Promise,這種自己造輪子的過程一定是進步最快的過程,快上車開始吧
    2022-11-11
  • 詳細解析let和const命令

    詳細解析let和const命令

    這篇文章主要介紹了詳細解析let和const命令,let和const是es6中新增的命令,一般let用來聲明變量而const則用來聲明常量,更多相關內容感興趣的小伙伴可以參考一下
    2022-06-06
  • Js利用prototype自定義數(shù)組方法示例

    Js利用prototype自定義數(shù)組方法示例

    JS中的phototype是JS中比較難理解的一個部分,但下面這篇文章主要給大家介紹了關于Javascript利用prototype自定義數(shù)組的相關資料,通過實例給大家介紹phototype的使用,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-10-10

最新評論