這個簡單的教程會通個一個簡單的例子來做爲指南。javascript
從中,你能夠學到:css
首先確保安裝了 node.jshtml
$ npm install webpack -g
上面命令確保能夠在命令行中使用 webpack 命令java
從一個空白文件開始,建立如下文件:node
增長 entry.js
react
document.write("It works.");
增長 index.html
webpack
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>
而後執行如下命令:git
$ webpack ./entry.js bundle.js
這將編譯 entry.js 並輸出爲 bundle.js。github
若是一切正常,將輸入相似下面的信息:web
Hash: e97678c23acf8ee01956 Version: webpack 1.9.10 Time: 135ms Asset Size Chunks Chunk Names bundle.js 1.44 kB 0 [emitted] main [0] ./entry.js 29 bytes {0} [built]
在瀏覽器中打開 index.html
,將展現 It works.
。
It works.
下一步,咱們將把部分代碼移到另外一個文件中。
增長 content.js
module.exports = "It works from content.js.";
更新 entry.js
- document.write("It works.");
+ document.write(require("./content.js"));
而後編譯
$ webpack ./entry.js bundle.js
刷新瀏覽器,能夠看到內容變爲 It works from content.js.
。
It works from content.js.
webpack 會分析入口文件(entry.js)來找尋依賴文件。這些文件(又稱之爲模塊)會包括到
bundle.js
中。webpack 會給每一個模塊一個惟一的 id,而後在bundle.js
中經過該 id 來訪問對應的模塊。啓動時,只會執行入口模塊。一個短小的運行時提供了require
函數,在引用模塊時會執行依賴模塊。
咱們但願在應用中增長一個 css 文件。
由於 webpack 自己只能支持 js,因此須要 css-loader
來處理 css 文件,同時還須要一個 style-loader
來在頁面中使用 css 文件裏定義的樣式。
建立一個空白的 node_modules
目錄。
執行 npm install css-loader style-loader
來安裝加載器。(由於須要安裝在當前應用,因此不須要 -g
參數)
而後具體使用
增長 style.css
body {
background: yellow;
}
更新 entry.js
+ require("!style!css!./style.css");
document.write(require("./content.js"));
經過在模塊請求前添加加載器,模塊將會被加載器管道處理。這些加載器特定的方式來處理文件內容,最終轉換後的內容將是一個 javascript 模塊。
注:串聯起來的加載器將自右向左執行。
咱們並不但願寫相似這樣的代碼 require("!style!css!./style.css");
。咱們能夠給指定的文件後綴綁定加載器,這樣只須要寫 require("./style.css")
。
更新 entry.js
- require("!style!css!./style.css");
+ require("./style.css");
document.write(require("./content.js"));
而後運行下面的命令來編譯
$ webpack ./entry.js bundle.js --module-bind 'css=style!css'
刷新頁面,將看到一樣的效果。
It works from content.js.
把配置選項移到配置文件中
增長 webpack.config.js
module.exports = {
entry: "./entry.js",
output: {
path: __dirname,
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style!css" }
]
}
};
而後只需執行 webpack
來編譯
Hash: 88d0f4710a9d3a391d69
Version: webpack 1.9.10
Time: 263ms
Asset Size Chunks Chunk Names
bundle.js 10.7 kB 0 [emitted] main
[0] ./entry.js 76 bytes {0} [built]
[5] ./content.js 44 bytes {0} [built]
+ 4 hidden modules
webpack 命令會嘗試加載當前目錄下的
webpack.config.js
文件。
若是項目變得愈來愈大,編譯耗時將會愈來愈長。因此,咱們但願可以展現一些進度條,同時增長顏色……
這些需求能夠經過如下命令來實現
$ webpack --progress --colors
咱們並不但願每個變動都須要去手動編譯,則能夠經過如下命令來改善。
$ webpack --progress --colors --watch
這樣,webpack 會緩存未變動的模塊而輸出變動的模塊。
開啓 webpack 監控模式後,webpack 會給全部文件添加用於編譯的文件監控。若是有任何變動,將會觸發編譯。當緩存開啓時,webpack 會在內存中保存全部模塊內容並在沒變動時直接重用。
開發服務器是一個更好的選擇
$ npm install webpack-dev-server -g
而後
$ webpack-dev-server --progress --colors
這會在 localhost:8080 提供一個小的 express 服務器來提供靜態資源以及自動編譯的套件。當有套件從新編譯後,會經過 socket.io 來自動更新瀏覽器頁面。在瀏覽器中打開 http://localhost:8080/webpack-dev-server/bundle 。
webpack-dev-server 使用了 webpack 監控模式,同時也阻止了 webpack 生成結果文件到硬盤,而是直接經過內存來提供服務。