webpack是當下最熱門的前端資源模塊化打包工具,通過 loader 方式,號稱任何資源都可以打包。它在編譯的時候就直接將模塊整理打包、壓縮,而不像sea.js和require.js需要在頁面中引用額外的文件管理,當然,各有不同。
安裝
如果你還沒有安裝node.js
的話,首先安裝 node.js;
使用npm
安裝webpack,或者使用cnpm
速度更快。
npm install webpack -g
使用 -g
將webpack安裝到全局環境下,安裝完運行 webpack -h
命令試試。
一般會將webpack
安裝項目依賴中,這樣就可以使用項目本地的webpack
,據說效率會高一點;
先使用npm init
創建創建package.json文件。
Package.json 屬性說明
- name 包名。
- version 包的版本號。
- description 包的描述。
- homepage 包的官網 url 。
- author 包的作者姓名。
- contributors 包的其他貢獻者姓名。
- dependencies 依賴包列表。如果依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。
- repository 包代碼存放的地方的類型,可以是 git 或 svn,git 可在 Github 上。
- main 一個模塊ID,它是一個指向你程序的主要項目。就是說,如果你包的名字叫 express,然后用戶安裝它,然后require("express")。
- keywords - 關鍵字
將webpack寫入項目依賴中:
cnpm install webpack --save-dev
如果需要使用 Webpack 開發工具,要單獨安裝:
cnpm install webpack-dev-server --save-dev
如何使用
項目首頁index.html,入口文件entry.js:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>webpack</title>
<link rel="stylesheet" href="dist/css/style.css">
</head>
<body>
<h1>webpack</h1>
<script src="dist/js/entry.js"></script>
</body>
</html>
entry.js:
document.write('hi webpack.');
執行命令將src/js/entry.js
打包到dist/js/entry.js
:
webpack src/js/entry.js dist/js/entry.js
正常執行后會輸出下面的日志:
Hash: 1931694bece61d881e02
Version: webpack 1.14.0
Time: 37ms
Asset Size Chunks Chunk Names
entry.js 1.42 kB 0 [emitted] main
[0] ./src/js/entry.js 30 bytes {0} [built]
打包后的dist/js/entry.js內容(沒壓縮的情況):
一個簡單基礎的打包流程實現了,但其實webpack遠不止這么簡單,它非常強大,我們可以把一些功能寫入到配置文件中,在項目的根目錄下面創建一個webpack.config.js
var webpack = require('webpack');
module.exports = {
entry: './src/js/entry.js', // 入口文件
output: { // 輸出文件
path: __dirname + '/dist/js/',
filename: 'entry.js'
}
};
然后再項目根目錄運行webpack
命令,會自動執行webpack.config.js
里面的配置;
可以輸入webpack --watch
命令運行,會自動監聽文件內容變化,自動打包;
如果開發環境和線上環境的配置有不一樣的地方,也可以配置多個webpack.config.js
文件,運行命令的時候通過webpack --config webpack-dev.config.js
執行不同的配置;
還有很重要的一點,代碼都打包了,我們調試代碼是很不方便的,所以可以在開發環境的配置文件里面增加devtool: 'inline-source-map'
:
var webpack = require('webpack');
module.exports = {
entry: './src/js/entry.js', // 入口文件
output: { // 輸出文件
path: __dirname + '/dist/js/',
filename: 'entry.js'
},
devtool: 'inline-source-map' //生成 sourcemap
};
更多配置,去查看官方的介紹吧。http://webpack.github.io/docs/configuration.html