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

淺談webpack對(duì)樣式的處理

 更新時(shí)間:2018年01月05日 16:00:00   作者:wind4gis  
這篇文章主要介紹了淺談webpack對(duì)樣式的處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了webpack對(duì)樣式的處理,分享給大家,具體如下:

我們可以在js中引入樣式文件

require('myStyle.css')

這時(shí)我們便需要引入相應(yīng)的webpack loader來幫助我們解析這段代碼。

css-loader搭配style-loader

首先,我們可以引入css-loader和style-loader來處理css的解析,其中,css-loader是用來解析css文件,style-loader是用來將css文件嵌入到j(luò)s文件里

var path = require('path')
module.exports = {
 context: path.join(__dirname, 'src')
 entry: './',
 module: {
 rules: [
  {
  test: /\.css$/,
  include: [
   path.join(__dirname, 'src')
  ],
  use: ['style-loader', 'css-loader']
  }
 ]
 },
 output: {
  path: path.join(__dirname, 'dist'),
  filename: '[name].bundle.[hash].js'
 }
}

在上面的代碼里,解析順序是從右到左解析,先使用css-loader解析出css文件之后,再使用style-loader嵌入到j(luò)s代碼里。

如果你使用less來寫樣式的話,則需要先用less-loader來編譯樣式文件為css文件,再繼續(xù)使用css-loader與style-loader。另外,loader加載器可以省略后面的-loader。所以上面的代碼可以縮寫成

module: {
 rules: [
 {
  test: /\.css$/,
  include: [
  path.join(__dirname, 'src')
  ],
  use: ['style', 'css', 'less']
 }
 ]
}

一般在測(cè)試環(huán)境里為了快點(diǎn)編譯css,會(huì)用這種方式多一點(diǎn),但是這樣子編譯出來的js文件會(huì)比較大,不大適合在生產(chǎn)環(huán)境里使用。

編譯成單獨(dú)的文件

上面的做法會(huì)把css和js打包在一起,減少實(shí)際請(qǐng)求的次數(shù),但是由于編譯出來的js文件比較大,浪費(fèi)帶寬。因此,我們使用extract-text-webpack-plugin插件,把css文件編譯成獨(dú)立的文件。我們就可以利用CDN把這個(gè)文件推送到節(jié)點(diǎn)服務(wù)器,或者根據(jù)視情況按需加載,進(jìn)而優(yōu)化客戶請(qǐng)求鏈路,加速頁面響應(yīng)。

var path = require('path'),
 ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports = {
 context: path.join(__dirname, 'src'),
 entry: './',
 module: {
 rules: [{
  test: /\.css$/,
  include: [
  path.join(__dirname, 'src')
  ],
  use: ExtractTextPlugin.extract({
  fallback: 'style',
  use: 'css'
  })
 }]
 },
 output: {
  path: path.join(__dirname, 'dist'),
  filename: '[name].bundle.[hash].js'
 },
 plugins: [
 new ExtractTextPlugin('[name].css')
 ]
}

通過上面的代碼,我們使用extract-text-webpack-plugin插件處理src目錄下所有的css文件,先使用css-loader插件解析出css代碼,如果解析失敗,使用style-loader插件解析,最終在dist目錄下生成對(duì)應(yīng)的js文件

兼容舊瀏覽器

以前我們寫樣式時(shí),有些樣式不同瀏覽器需要加不同的前綴,如-webkit-?,F(xiàn)在有了構(gòu)建工具,我們便不需要再去關(guān)注這些前綴了,構(gòu)建工具會(huì)自動(dòng)幫我們加上這些前綴。

對(duì)于webpack我們自然想到需要使用loader或者plugin來幫助我們做這些事情,查了下發(fā)現(xiàn)autoprefixer-loader已經(jīng)廢棄不再維護(hù)了,推薦使用posscss

postcss是用于在js中轉(zhuǎn)換css樣式的js插件,需要搭配其他插件一起使用,這點(diǎn)和babel6一樣,本身只是個(gè)轉(zhuǎn)換器,并不提供代碼解析功能。

這里我們需要autoprefixer插件來為我們的樣式添加前綴。首先下載該模塊。

npm install -D autoprefixer

接著便可以配置webpack了

var autoprefixer = require('autoprefixer')
module.exports = {
 ...
 module: {
 loaders: [
  ...
  {
  {
   test: /\.css$/,
   loader: ExtractTextPlugin.extract(["css", "postcss"])
  },
  }
 ]
 },
 postcss: [autoprefixer()],
 ...
}

查看一下抽取出來的樣式文件便可以發(fā)現(xiàn)已經(jīng)加上了前綴

a {
 display: flex;
}
/*compiles to:*/
a {
 display: -webkit-box;
 display: -webkit-flex;
 display: -ms-flexbox;
 display: flex
}

另外autoprefixer還可以根據(jù)目標(biāo)瀏覽器版本生成不同的前綴個(gè)數(shù),例如你的應(yīng)用的使用用戶如果大多數(shù)是使用比較新版本的瀏覽器,那么便可以做如下配置。

postcss: [autoprefixer({ browsers: ['last 2 versions'] })] 這是生成的樣式便會(huì)有些不一樣,還是上面的例子

a {
 display: flex;
}
/*compiles to:*/
a {
 display: -webkit-flex;
 display: -ms-flexbox;
 display: flex;
}

樣式壓縮

壓縮代碼我們可以使用webpack的內(nèi)置插件UglifyJsPlugin來做,它既可以壓縮js代碼也可以壓縮css代碼。

plugins: [
 ...
 new webpack.optimize.UglifyJsPlugin({
 compress: {
  warnings: false
 }
 }),
 ...
]

其實(shí)并不能說是在壓縮css代碼,本質(zhì)來說還是壓縮js代碼,再將這塊代碼輸出到css文件中。

使用CommonsChunkPlugin抽取公共代碼

首先要明確一點(diǎn)CommonsChunkPlugin是在有多個(gè)entry時(shí)使用的,即在有多個(gè)入口文件時(shí),這些入口文件可能會(huì)有一些共同的代碼,我們便可以將這些共同的代碼抽取出來成獨(dú)立的文件。明白這一點(diǎn)非常重要。(搞了很久才明白的一點(diǎn),唉~~~~)

如果在多個(gè)entry中require了相同的css文件,我們便可以使用CommonsChunkPlugin來將這些共同的樣式文件抽取出來為獨(dú)立的樣式文件。

module.exports = {
 entry: {
 "A": "./src/entry.js",
 "B": "./src/entry2.js"
 },
 ...
 plugins: [
 new webpack.optimize.CommonsChunkPlugin({
 name: "commons", filename: "commons.js"
 }),
 ...
 ]
}

當(dāng)然,這里不止會(huì)抽取共同的css,如果有共同的js代碼,也會(huì)抽取成為commons.js。 這里有個(gè)有趣的現(xiàn)象,抽取出來的css文件的命名將會(huì)是參數(shù)中name的值,而js文件名則會(huì)是filename的值。

CommonsChunkPlugin好像只會(huì)將所有chunk中都共有的模塊抽取出來,如果存在如下的依賴

// entry1.js
var style1 = require('./style/myStyle.css')
var style2 = require('./style/style.css')

// entry2.js
require("./style/myStyle.css")
require("./style/myStyle2.css")

// entry3.js
require("./style/myStyle2.css")

使用插件后會(huì)發(fā)現(xiàn),根本沒有生成commons.css文件。

如果我們只需要取前兩個(gè)chunk的共同代碼,我們可以這么做

module.exports = {
 entry: {
 "A": "./src/entry.js",
 "B": "./src/entry2.js",
 "C": "./src/entry3.js"
 },
 ...
 plugins: [
 new webpack.optimize.CommonsChunkPlugin({
 name: "commons", filename: "commons.js", chunks: ['A', 'B']
 }),
 ...
 ]
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序圖片右邊加兩行文字的代碼

    微信小程序圖片右邊加兩行文字的代碼

    這篇文章主要介紹了微信小程序圖片右邊加兩行文字的代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 使用Javascript寫的2048小游戲

    使用Javascript寫的2048小游戲

    這篇文章主要介紹了使用Javascript寫的2048小游戲的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 使用JavaScript switch case 另類寫法

    使用JavaScript switch case 另類寫法

    在JavaScript里,函數(shù)(todoA、todoB、todoC)就是對(duì)象,“()”的作用就是就是執(zhí)行函數(shù)對(duì)象,二者簡(jiǎn)單地組合一下就能夠讓代碼清晰簡(jiǎn)潔很多了,何樂不為呢?
    2010-03-03
  • 微信小程序視圖容器和基本內(nèi)容組件圖文詳解

    微信小程序視圖容器和基本內(nèi)容組件圖文詳解

    小程序提供了豐富的基礎(chǔ)組件給開發(fā)者,開發(fā)者可以像搭積木一樣,組合各種組件拼合成自己的小程序,下面這篇文章主要給大家介紹了關(guān)于微信小程序視圖容器和基本內(nèi)容組件的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)...
    2007-02-02
  • 一個(gè)特殊的排序需求的javascript實(shí)現(xiàn)代碼

    一個(gè)特殊的排序需求的javascript實(shí)現(xiàn)代碼

    看了之后1是手癢癢,2是覺得樓主的實(shí)現(xiàn)有問題,就動(dòng)手寫了一下,用js,大概用了30-40分鐘。
    2009-09-09
  • 淺談ES6 模板字符串的具體使用方法

    淺談ES6 模板字符串的具體使用方法

    本篇文章主要介紹了淺談ES6 模板字符串的具體使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 利用JS實(shí)現(xiàn)窗口最大化和最小化效果

    利用JS實(shí)現(xiàn)窗口最大化和最小化效果

    在現(xiàn)代 Web 開發(fā)中,JavaScript 提供了多種方法來與瀏覽器窗口進(jìn)行交互,包括最大化和最小化瀏覽器窗口,雖然瀏覽器通常會(huì)限制對(duì)窗口尺寸的直接控制,但我們依然可以實(shí)現(xiàn)一些常見的行為,本文將探討如何使用 JavaScript 實(shí)現(xiàn)窗口的最大化和最小化效果
    2024-12-12
  • JavaScript中匿名函數(shù)用法實(shí)例

    JavaScript中匿名函數(shù)用法實(shí)例

    這篇文章主要介紹了JavaScript中匿名函數(shù)用法,實(shí)例分析了javascript中匿名函數(shù)的功能、定義及具體用法,需要的朋友可以參考下
    2015-03-03
  • JavaScript對(duì)象反射用法實(shí)例

    JavaScript對(duì)象反射用法實(shí)例

    這篇文章主要介紹了JavaScript對(duì)象反射用法,實(shí)例分析了反射DOM對(duì)象和自定義對(duì)象的具體用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

昔阳县| 夹江县| 达拉特旗| 汽车| 海盐县| 临泉县| 和静县| 塘沽区| 汽车| 丰台区| 灯塔市| 太白县| 浪卡子县| 海盐县| 大厂| 黄山市| 莒南县| 井陉县| 桑植县| 新绛县| 定南县| 巴中市| 宁津县| 夏邑县| 出国| 汉沽区| 稷山县| 安龙县| 康平县| 宿迁市| 四平市| 新河县| 扬州市| 内丘县| 阿坝| 华宁县| 赤壁市| 和龙市| 唐海县| 来宾市| 汤原县|