一、介紹
Webpack是德國開發者 Tobias Koppers 開發的模組載入器,它能把所有的資源文
件(JS、JSX、CSS、CoffeeScript、Less、Sass、Image等)都作為模組來使用和處理。
作為一個模組打包工具,主要功能是打包資原始檔並整合到一個包中,我們在開發時,只需
要引用一個包檔案,就能載入預先設計好的模組功能。
二、安裝
不同檔案型別的資源,Webpack有對應的模組loader,ES6語法轉換用的是babel-loader,
dataUrl用的是url-loader,樣式用的style、css-loader。
loader列表:http://webpack.github.io/docs/list-of-loaders.html
# 安裝webpack
npm install webpack
# 使用babel、css、dataUrl模組
npm install style-loader css-loader url-loader babel-loader babel-preset-es2015
# 建立webpack.config.js檔案
touch webpack.config.js
安裝Webpack之後,可以使用webpack命令列工具,它預設讀取當前目錄下的webpack.config.js配置檔案。
三、基本使用
webpack宣告載入babel、style、css、url的loader之後會讀取main.js所有模組,並把打包
後的結果輸出到bundle.js檔案中。
module.exports = {
// 讀取main.js檔案中引用的所有模組
entry: './main.js',
// 執行打包後輸出的檔案
output: {
filename: 'bundle.js'
},
// 載入模組
module: {
loaders: [
// 匹配所有js檔案,用babel工具識別ES6程式碼轉換成ES5
{ test: /\.js$/, loader: 'babel-loader', query: {presets: ['es2015']} },
// 匹配所有css檔案, 用style和css工具解析
{ test: /\.css$/, loader: 'style-loader!css-loader' },
// 匹配所有png檔案,解析成dataUrl格式
{ test: /\.(png|jpg)$/, loader: 'url-loader'} // inline base64 URLs for <=8k images, direct URLs for the rest
]
}
};
建立五個資原始檔,分別寫入
1. main.js
2. js/console-01.js
3. js/console-02.js
4. css/index.css
5. images/3.jpg
// main.js - 載入模組
// --------------------------------------------
require('./js/console-01.js');
require('./js/console-02.js');
require('./css/index.css');
// 讀取圖片模組,並輸出到body中
var img = document.createElement('img');
img.src = require('./images/react.jpg');
document.body.appendChild(img);
// --------------------------------------------
// JS - console-01.js
console.log('console 01');
// JS - ES6 - console-02.js
for (let i = 2; i <= 10; i++) {
console.log('console 02');
}
// CSS樣式模組
body {
background: #ccc;
}
執行webpack命令,它會讀取main.js檔案,並把main.js依賴的模組進行打包處理,最終輸出到bundle.js檔案下。
# 執行webpack命令
webpack
# 輸出結果
------------------------------------------------------
Hash: d9ca67a5753768b7c625
Version: webpack 1.12.11
Time: 52ms
Asset Size Chunks Chunk Names
bundle.js 24 kB 0 [emitted] main
+ 8 hidden modules
------------------------------------------------------
建立一個index.html檔案,並引用bundle.js開啟瀏覽器後
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script src="./bundle.js"></script> </body> </html>
bundle.js檔案包含了 CSS樣式載入、圖片dataUrl、JS 的合併打包處理。
四、哪些專案用到Webpack
1. React(JSX)
2. Vue (.vue)
3. Ant Design (淘寶Ant全元件)
五、哪些專案適合用Webpack
1. 單頁應用 SPA (Single Page Application)
2. 需要把資原始檔整理成一個檔案包的專案
3. 用到ES6和JSX專案
4. 可以考慮代替Gulp、Grunt等工具
參考資料:
http://webpack.github.io/
https://github.com/webpack
http://segmentfault.com/a/1190000002551952