亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

淺談webpack對樣式的處理

2024-05-06 16:41:49
字體:
來源:轉載
供稿:網友

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

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

require('myStyle.css')

這時我們便需要引入相應的webpack loader來幫助我們解析這段代碼。

css-loader搭配style-loader

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

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嵌入到js代碼里。

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

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

一般在測試環境里為了快點編譯css,會用這種方式多一點,但是這樣子編譯出來的js文件會比較大,不大適合在生產環境里使用。

編譯成單獨的文件

上面的做法會把css和js打包在一起,減少實際請求的次數,但是由于編譯出來的js文件比較大,浪費帶寬。因此,我們使用extract-text-webpack-plugin插件,把css文件編譯成獨立的文件。我們就可以利用CDN把這個文件推送到節點服務器,或者根據視情況按需加載,進而優化客戶請求鏈路,加速頁面響應。

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目錄下生成對應的js文件

兼容舊瀏覽器

以前我們寫樣式時,有些樣式不同瀏覽器需要加不同的前綴,如-webkit-?,F在有了構建工具,我們便不需要再去關注這些前綴了,構建工具會自動幫我們加上這些前綴。

對于webpack我們自然想到需要使用loader或者plugin來幫助我們做這些事情,查了下發現autoprefixer-loader已經廢棄不再維護了,推薦使用posscss

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

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

npm install -D autoprefixer

接著便可以配置webpack了

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

查看一下抽取出來的樣式文件便可以發現已經加上了前綴

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

另外autoprefixer還可以根據目標瀏覽器版本生成不同的前綴個數,例如你的應用的使用用戶如果大多數是使用比較新版本的瀏覽器,那么便可以做如下配置。

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

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

樣式壓縮

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

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

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

使用CommonsChunkPlugin抽取公共代碼

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

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

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

當然,這里不止會抽取共同的css,如果有共同的js代碼,也會抽取成為commons.js。 這里有個有趣的現象,抽取出來的css文件的命名將會是參數中name的值,而js文件名則會是filename的值。

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

// entry1.jsvar style1 = require('./style/myStyle.css')var style2 = require('./style/style.css')// entry2.jsrequire("./style/myStyle.css")require("./style/myStyle2.css")// entry3.jsrequire("./style/myStyle2.css")

使用插件后會發現,根本沒有生成commons.css文件。

如果我們只需要取前兩個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'] }), ... ]}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色欧美亚洲高清在线视频| 久久天天躁狠狠躁老女人| 日本成人精品在线| 黑人精品xxx一区| 国产一区二区动漫| 日本中文字幕不卡免费| 亚洲人成毛片在线播放| 亚洲摸下面视频| 国产精品欧美一区二区三区奶水| 亚洲精品一区久久久久久| 国产成人高清激情视频在线观看| 日韩中文字幕久久| 久久天天躁狠狠躁夜夜av| 久久91精品国产91久久跳| 亚洲欧美在线一区| 97高清免费视频| 亚洲精品小视频| 欧美激情精品久久久久久黑人| 欧美极品少妇xxxxⅹ免费视频| 97激碰免费视频| 亚洲第一视频在线观看| 亚洲成人av在线播放| 久久免费高清视频| 久久影院在线观看| 亚洲欧美一区二区三区在线| 日韩免费观看网站| 国产视频在线观看一区二区| 久热精品在线视频| 亚洲欧美激情另类校园| 欧美成人精品三级在线观看| 成人免费视频97| 日韩电视剧免费观看网站| 高清日韩电视剧大全免费播放在线观看| 狠狠综合久久av一区二区小说| 日韩欧美国产视频| 在线看国产精品| 欧美激情精品久久久| 国产精品av电影| 欧美激情乱人伦一区| 久久精品欧美视频| 国产精品美女www爽爽爽视频| 亚洲美女喷白浆| 国产精品吊钟奶在线| 91老司机在线| 亚洲天堂免费在线| 色爱av美腿丝袜综合粉嫩av| 欧美成人激情在线| 亚洲视频网站在线观看| 成人在线免费观看视视频| 一区二区三区视频观看| 色偷偷偷亚洲综合网另类| 国产视频精品自拍| 国产欧美精品一区二区三区-老狼| 欧美日韩中国免费专区在线看| 亚洲视频在线观看| 国产日韩欧美影视| 欧美极品少妇xxxxⅹ免费视频| 亚洲区一区二区| 色老头一区二区三区在线观看| 国产精品久久久久久av福利| 久久免费在线观看| 日韩欧美成人免费视频| 亚洲第一视频在线观看| 色无极影院亚洲| 91精品啪在线观看麻豆免费| 日韩电影中文字幕在线| 日韩美女视频免费在线观看| 国产精品揄拍500视频| 97视频免费在线观看| 色av中文字幕一区| 日韩网站在线观看| 亚洲第一av在线| 68精品久久久久久欧美| 97在线免费视频| 亚洲男人的天堂在线| 日韩成人中文电影| 欧美成人激情图片网| 77777亚洲午夜久久多人| 亚洲乱码国产乱码精品精天堂| 亚洲黄页视频免费观看| 日韩在线视频线视频免费网站| 伦伦影院午夜日韩欧美限制| 亚洲电影免费观看高清| 国产精品白丝jk喷水视频一区| 精品视频在线播放免| 动漫精品一区二区| 国产精品一二三视频| 亚洲视频在线观看免费| 国产精品稀缺呦系列在线| 久久精品一区中文字幕| 国产精品丝袜久久久久久不卡| 欧美一区亚洲一区| 久久精品国产v日韩v亚洲| 在线观看日韩专区| 精品伊人久久97| 欧美精品一二区| 亚洲精品suv精品一区二区| 国产精品极品美女粉嫩高清在线| 韩国国内大量揄拍精品视频| 国产视频久久网| 欧美国产精品人人做人人爱| 日韩亚洲成人av在线| 欧美日韩日本国产| 欧美性生交大片免网| 日韩在线视频一区| 国产精品aaaa| 国产欧美日韩精品丝袜高跟鞋| 亚洲成人久久网| 欧美在线视频在线播放完整版免费观看| 国产一区二区三区在线观看视频| 综合网日日天干夜夜久久| 欧美一级片久久久久久久| 92福利视频午夜1000合集在线观看| 亚洲一区二区三区视频播放| 日韩资源在线观看| 91人人爽人人爽人人精88v| 亚洲资源在线看| 欧美黑人极品猛少妇色xxxxx| 国产精品美女无圣光视频| 亚洲人成网站999久久久综合| 国产精品高清在线观看| 亚洲自拍在线观看| 在线精品国产成人综合| 欧美日韩国产中文精品字幕自在自线| 激情av一区二区| 日韩电影大片中文字幕| 国内精品久久久| 91chinesevideo永久地址| 亚洲精品免费一区二区三区| 亚洲一区中文字幕在线观看| 国产精品va在线播放我和闺蜜| 98精品国产自产在线观看| 精品久久久久久久久久久久久久| 精品视频在线播放色网色视频| 久久久久一本一区二区青青蜜月| 国产免费一区二区三区香蕉精| 国产免费一区视频观看免费| 亚洲一区亚洲二区亚洲三区| 国产精品扒开腿做爽爽爽的视频| 日韩美女视频在线观看| 欧美高清视频免费观看| 日韩免费av在线| 亚洲综合日韩在线| 中文字幕精品av| 日韩精品在线观看一区| 日韩精品免费在线视频| 91精品国产综合久久香蕉的用户体验| 欧美成人自拍视频| 久久精品久久精品亚洲人| 亚洲欧美综合v| 国产脚交av在线一区二区| 国产精品黄视频| 91九色国产社区在线观看| 亚洲成av人乱码色午夜| 亚洲综合在线做性| 国产精品久久电影观看| 国产欧美日韩91| 日韩欧美一区视频| 成人自拍性视频| 奇米一区二区三区四区久久| 欧美日韩综合视频网址| 欧美日韩国产中字| 国产亚洲欧美日韩一区二区| 亚洲激情国产精品|