webpack進階之插件篇

上一篇博客講解了webpack環境的基本,這一篇講解一些更深入的內容和開發技巧。基本環境搭建就不展開講了

一、插件篇

1. 自動補全css3前綴

autoprefixer

官方是這樣說的:Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website
,也就是說它是一個自動檢測兼容性給各個瀏覽器加個內核前綴的插件。

舉個栗子:最新的彈性盒模型flux
實際代碼:

:fullscreen a {display: flex
}

插件自動補充后

a {display: -webkit-box;display: -webkit-flex;display: -ms-flexbox;display: flex
}

效果顯而易見,我們可以更專注于css布局和美化,而不需要花過多的精力都寫相同的外碼而加上不同的前綴,也減少了冗余代碼。

使用方法:

cnpm install --save-dev autoprefixer postcss-loader

var autoprefixer = require('autoprefixer');
module.exports={//其他配置這里就不寫了module:{loaders:[{test:/\.css$/,//在原有基礎上加上一個postcss的loader就可以了loaders:['style-loader','css-loader','postcss-loader']}]},postcss:[autoprefixer({browsers:['last 2 versions']})]}

2. 自動生成html插件

html-webpack-plugin

cnpm install html-webpack-plugin --save-dev

  //webpack.config.jsvar HtmlWebpackPlugin = require('html-webpack-plugin');module.exports={entry:'./index.js',output:{path:__dirname+'/dist',filename:'bundle.js'}plugins:[new HtmlWebpackPlugin()]}

作用:它會在dist目錄下自動生成一個index.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Webpack App</title></head><body><script src="bundle.js"></script></body>
</html>

其他配置參數:

{entry: 'index.js',output: {path: 'dist',filename: 'bundle.js'},plugins: [new HtmlWebpackPlugin({title: 'My App',filename: 'admin.html',template:'header.html',inject: 'body',favicon:'./images/favico.ico',minify:true,hash:true,cache:false,showErrors:false,"chunks": {"head": {"entry": "assets/head_bundle.js","css": [ "main.css" ]},xhtml:false})]
}
--- header.html ---
<!DOCTYPE html>
<html><head><meta http-equiv="Content-type" content="text/html; charset=utf-8"/><title><%= htmlWebpackPlugin.options.title %></title></head><body></body>
</html>

作用:

  title: 設置title的名字   filename: 設置這個html的文件名   template:要使用的模塊的路徑  inject: 把模板注入到哪個標簽后 'body',   favicon: 給html添加一個favicon  './images/favico.ico',   minify:是否壓縮  {...} | false (最新api變動,原來是ture|false 感謝@onmi指正)hash:是否hash化 true false ,     cache:是否緩存,   showErrors:是否顯示錯誤,  chunks:目前沒太明白  xhtml:是否自動畢業標簽 默認false  

3. 提取樣式插件

extract-text-webpack-plugin

官網是這么解釋的Extract text from bundle into a file.,把額外的數據加到編譯好的文件中

var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {module: {loaders: [{ test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }]},plugins: [new HtmlWebpackPlugin({template: './src/public/index.html',inject: 'body'}),new ExtractTextPlugin("[name].[hash].css")]
}

說明:將css放到index.html的body上面

4. 拷貝資源插件

copy-webpack-plugin

官方這樣解釋 Copy files and directories in webpack,在webpack中拷貝文件和文件夾

cnpm install --save-dev copy-webpack-pluginnew CopyWebpackPlugin([{from: __dirname + '/src/public'
}]),

作用:把public 里面的內容全部拷貝到編譯目錄

參數作用其他說明
from定義要拷貝的源目錄from: __dirname + '/src/public'
to定義要烤盤膛的目標目錄from: __dirname + '/dist'
toType file 或者 dir 可選,默認是文件
force強制覆蓋先前的插件可選 默認false
context不知道作用可選 默認 base context 可用 specific context
flatten只拷貝文件不管文件夾默認是false
ignore忽略拷貝指定的文件可以用模糊匹配

5. 全局掛載插件

webpack.ProvidePlugin [webpack內置插件 ]

new webpack.ProvidePlugin({$: "jquery",jQuery: "jquery","window.jQuery": "jquery"
}))
new webpack.NoErrorsPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.CommonsChunkPlugin('common.js')

作用: 和上面5個一一對應

  當模塊使用這些變量的時候,wepback會自動加載。(區別于window掛載,感謝@lihuanghe121指正)不顯示錯誤插件查找相等或近似的模塊,避免在最終生成的文件中出現重復的模塊丑化js 混淆代碼而用提取公共代碼的插件

二、一個完整的栗子

'use strict';// Modules
var webpack = require('webpack');
var autoprefixer = require('autoprefixer');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');/*** Env* Get npm lifecycle event to identify the environment*/
var ENV = process.env.npm_lifecycle_event;
var isTest = ENV === 'test' || ENV === 'test-watch';
var isProd = ENV === 'build';module.exports = function makeWebpackConfig() {var config = {};config.entry = isTest ? {} : {app: './src/app/app.js'};config.output = isTest ? {} : {// Absolute output directorypath: __dirname + '/dist',publicPath: isProd ? '/' : 'http://localhost:8080/',filename: isProd ? '[name].[hash].js' : '[name].bundle.js',chunkFilename: isProd ? '[name].[hash].js' : '[name].bundle.js'};if (isTest) {config.devtool = 'inline-source-map';} else if (isProd) {config.devtool = 'source-map';} else {config.devtool = 'eval-source-map';}config.module = {preLoaders: [],loaders: [{test: /\.js$/,loader: 'babel',exclude: /node_modules/}, {test: /\.css/,loader: isTest ? 'null' : ExtractTextPlugin.extract('style', 'css?sourceMap!postcss')}, {test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,loader: 'file'}, {test: /\.json$/,loader: 'json'}, {test: /\.scss/,loader: 'style!css!sass'}, {test: /\.html$/,loader: 'raw'}]};if (isTest) {config.module.preLoaders.push({test: /\.js$/,exclude: [/node_modules/,/\.spec\.js$/],loader: 'isparta-instrumenter'})}config.postcss = [autoprefixer({browsers: ['last 2 version']})];config.plugins = [];if (!isTest) {config.plugins.push(new HtmlWebpackPlugin({template: './src/public/index.html',inject: 'body'}),new ExtractTextPlugin('[name].[hash].css', {disable: !isProd}))}if (isProd) {config.plugins.push(new webpack.NoErrorsPlugin(),new webpack.optimize.DedupePlugin(),new webpack.optimize.UglifyJsPlugin(),new CopyWebpackPlugin([{from: __dirname + '/src/public'}]),new webpack.ProvidePlugin({$: "jquery",jQuery: "jquery","window.jQuery": "jquery"}))}config.devServer = {contentBase: './src/public',stats: 'minimal'};return config;
}();

三、調試技巧

if (isTest) {config.devtool = 'inline-source-map';
} 

作用: 使用source-map可以在debug的時候看到源代碼,方便 查錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT:QObject 簡單介紹

QObject 是所有Qt對象的基類。QObject 是Qt模塊的核心。它的最主要特征是關于對象間無縫通信的機制&#xff1a;信號與槽。 使用connect()建立信號到槽的連接&#xff0c;使用disconnect()銷毀連接&#xff0c;使用blockSignals()暫時阻塞信號以避免無限通知循環&#xff0c;使…

利用malloc定義數組

使用malloc方法時&#xff0c;應導入文件 #include<malloc.h> 1.利用malloc定義一維數組 int *num (int *)malloc(sizeof(int)*8); // 定義一個一維數組有8個元素&#xff0c;等價于 int num[8]; 2.利用malloc定義二維數組 int **num &#xff08; int **&#xff09…

C++中基類的析構函數為什么要用virtual虛析構函數

from&#xff1a;https://blog.csdn.net/iicy266/article/details/11906457知識背景要弄明白這個問題&#xff0c;首先要了解下C中的動態綁定。 關于動態綁定的講解&#xff0c;請參閱&#xff1a; C中的動態類型與動態綁定、虛函數、多態實現 正題直接的講&#xff0c;C中基類…

第二章 Python基本元素:數字、字符串和變量

Python有哪些內置的數據類型&#xff1a; True False #布爾型 42 100000000 #整型 3.14159 1.0e8 #浮點型 abcdes #字符串 2.1 變量、名字和對象 python中統一的形式是什么&#xff1f; 對象&#xff0c;所有的對象都是以對象的形式存在…

Mac - 設置NSButton 的背景色

- (void)drawRect:(NSRect)dirtyRect {[super drawRect:dirtyRect];[[NSColor clearColor] setFill];NSRectFill(self.bounds);self.wantsLayer YES;self.layer.cornerRadius 8;self.layer.masksToBounds YES; } 轉載于:https://www.cnblogs.com/741162830qq/p/5157046.html…

C++中static關鍵字作用總結

from&#xff1a;https://www.cnblogs.com/songdanzju/p/7422380.html1.先來介紹它的第一條也是最重要的一條&#xff1a;隱藏。&#xff08;static函數&#xff0c;static變量均可&#xff09; 當同時編譯多個文件時&#xff0c;所有未加static前綴的全局變量和函數都具有全局…

C Primer Plus 第7章 C控制語句:分支和跳轉 7.4 一個統計字數的程序

2019獨角獸企業重金招聘Python工程師標準>>> 首先&#xff0c;這個程序應該逐個讀取字符&#xff0c;并且應該有些方法判斷何時停止&#xff1b;第二&#xff0c;它應該能夠識別并統計下列單位&#xff1a;字符、行和單詞。下面是偽代碼描述&#xff1a; read a cha…

深入理解extern用法

from&#xff1a;https://blog.csdn.net/z702143700/article/details/46805241一、 extern做變量聲明 l 聲明extern關鍵字的全局變量和函數可以使得它們能夠跨文件被訪問。 我們一般把所有的全局變量和全局函數的實現都放在一個*.cpp文件里面&#xff0c;然后用一個同名的*.h文…

收集整理的非常有用的PHP函數

為什么80%的碼農都做不了架構師&#xff1f;>>> 1、PHP加密解密 2、PHP生成隨機字符串 3、PHP獲取文件擴展名&#xff08;后綴&#xff09; 4、PHP獲取文件大小并格式化 5、PHP替換標簽字符 6、PHP列出目錄下的文件名 7、PHP獲取當前頁面URL 8、PHP強制下載文件 9、…

進程間的通信方式——pipe(管道)

from&#xff1a;https://blog.csdn.net/skyroben/article/details/715133851.進程間通信每個進程各自有不同的用戶地址空間,任何一個進程的全局變量在另一個進程中都看不到&#xff0c;所以進程之間要交換數據必須通過內核,在內核中開辟一塊緩沖區,進程A把數據從用戶空間拷到內…

bash中(),{},(()),[],[[]]的區別

前言:在bash中遇到各種括號&#xff0c;同時在進行字符數值比較判定時&#xff0c;總是不斷出現問題&#xff0c;于是通過參考《advanced bash-scripting guide》&#xff0c;同時在centos 6.7版本上進行測試&#xff0c;現況總結如下。如有紕漏&#xff0c;望指正。一.()一個命…

多進程和多線程之間的通信方式及通信實現步驟小結

進程間通信方式 # 管道( pipe )&#xff1a;管道是一種半雙工的通信方式&#xff0c;數據只能單向流動&#xff0c;而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。 # 有名管道 (namedpipe) &#xff1a; 有名管道也是半雙工的通信方式&#xff0c;…

highcharts 顯示網格

2019獨角獸企業重金招聘Python工程師標準>>> xAxis: { gridLineColor: #197F07, gridLineWidth: 1 }, yAxis: { gridLineColor: #197F07, gridLineWidth: 2 }, 轉載于:https://my.oschina.net/LingBlog/blog/697885

Cheat—— 給Linux初學者和管理員一個終極命令行備忘單

編譯自&#xff1a;http://www.tecmint.com/cheat-command-line-cheat-sheet-for-linux-users/作者&#xff1a; Avishek Kumar原創&#xff1a;LCTT https://linux.cn/article-3760-1.html譯者&#xff1a; su-kaiyao原文稍有改動 當你不確定你所運行的命令&#xff0c;尤其是…

串口操作之API篇 CreateFile

CreateFile http://bbs.fishc.com/thread-72944-1-1.html(出處: 魚C論壇) ------------------------------------------------------------------------CreateFile用于打開串口,如果操作成功,返回一個句柄.1 function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareM…

云數據庫·ApsaraDB 產品6月刊

【重點關注】RDS發布新規格 RDS于5月下旬發布新產品規格&#xff0c;新規格對齊ECS配置:1.連接數大幅提升 互聯網型的應用特點是發展快速&#xff0c;在云上應用層會基于VM進行橫向擴展&#xff0c;對數據庫的要求除了資…

【同行說技術】教你玩轉iOS的5篇技術干貨

在文章《iOS從小白到大神必讀資料匯總一到四》這個系列中&#xff0c;深入介紹了iOS入門學習及進階的相關技術資料&#xff0c;今天小編繼續發布iOS學習的5篇干貨文章&#xff0c;趕緊來看看吧 &#xff01;喜歡寫博客的工程師博主可以加工程師博主交流群&#xff1a;391519124…

Qt Console Application 與 Qt GUI Application互轉

在桌面開發中&#xff0c;總的來說&#xff0c;包含兩種類型的應用程序&#xff1a;無界面的Console程序和有界面的GUI程序。Qt也不例外&#xff0c;包含Qt Console Application和Qt GUI Application。一、Qt Console Application在VS2015中創建一個Qt Console Application&…

Create Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(50)

2019獨角獸企業重金招聘Python工程師標準>>> 前面已經學習了 Cinder 的架構和相關組件&#xff0c;從本節我們開始詳細分析 Cinder 的各種操作&#xff0c;首先討論 Cinder 如何創建 volume。 Create 操作流程如下&#xff1a; 客戶&#xff08;可以是 OpenStack 最…

如何有效解決C與C++的相互調用問題

from&#xff1a;https://blog.csdn.net/gobitan/article/details/1532769在實際工作中可能經常要進行C和C的混合編程&#xff0c;C調用C語言的代碼通常都比較容易&#xff0c;但也有一些細節需要注意。C要調用C的代碼就略為麻煩一些&#xff0c;因為C不支持面向對象的特征。一…