目錄javascript
首先安裝Nodejs,直接去nodejs官網下載https://nodejs.org/en/,默認會安裝Npm,因此這裏能夠不用單獨安裝。css
因爲國內網絡緣由,若是直接使用Npm安裝依賴包會由於網絡和牆的緣由致使不成功,好在淘寶給我提供了能夠使用的鏡像,地址是:https://npm.taobao.org/,按照其【使用說明】將鏡像安裝好。html
目前前端開發比較火的IDE是Jetbrain的WebStorm,到其官網下載:http://www.jetbrains.com/webstorm/,安裝後有30天的試用期,若是以爲不爽,能夠去網上找破解,這裏把我使用的註冊信息放出來。固然最好的是付費啦前端
當開發環境準備好後,就能夠打開WebStorm,新建一個空項目,以下圖:java
使用webstorm的好處不少,其中之一就是能夠直接在IDE裏面調出控制檯,以下圖:node
在控制檯輸入「npm init」初始化這個工程,控制檯會讓你輸入以下信息,這裏能夠默認都回車,最後按照提示輸入"yes"則初始化完成。webpack
這時在工程根目錄下會生成package.json,打開文件能看到剛纔在控制檯輸入的信息,以下:git
package.json文件是Nodejs和Npm查找依賴的清單,更多的信息能夠參考這篇文檔:https://docs.npmjs.com/files/package.json和http://www.ruanyifeng.com/blog/2016/10/npm_scripts.htmles6
關於Webpack的概念和做用能夠參考這篇博文:https://llp0574.github.io/2016/11/29/getting-started-with-webpack2/?utm_source=tuicool&utm_medium=referral和
http://www.jianshu.com/p/42e11515c10f。英語好的童鞋能夠直接參看官網:http://webpack.github.io/github
使用webpack的目的是讓代碼更模塊化,方便維護和管理,這和在Java中用maven來管理包很類似。
首先,在控制檯輸入命令:npm install webpack,這個命令的做用是讓npm安裝webpack到node_modules(該目錄會自動生成)下。
更多的NPM命令能夠參看官網:https://docs.npmjs.com/和http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
1.首先,咱們再工程目錄下新建src目錄,並在src下新建hello.js文件,文件內寫以下代碼:
export default function () { const hello = document.createElement("div"); hello.textContent = "Hello Webpack!" return hello; }
這是按照ES6的語法來實現。
關於ES6的更多內容能夠參考這篇文檔:http://es6.ruanyifeng.com/#README。
export是定義對外暴露的接口,default是爲export提供一個默認輸出,這樣能夠在import的時候自定義變量名而不用在import的時候指定export中的變量名。因此這段代碼意思是:默認輸入一個匿名函數。
2.而後,在hello.js同級下建立main.js,而後輸入以下內容:
import Hello from "./hello"; document.getElementById("app").appendChild(Hello());
import是將剛纔所寫的hello.js文件當作一個模塊導入進來,"Hello"變量就是爲這個匿名函數定義變量名,from後面就是被引入的文件地址,若是是js文件默認不用寫,該路徑能夠是相對路徑或者絕對路徑,而後用js去從dom獲取app節點,並添加子級元素。
3.在工程根目錄新建public文件夾,並新建一個Index.html文件,以下:
而後在Html文件中建立一個div,其id爲app,並在body尾處引入script,以下圖:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack Example</title> <body> <div id="app" ></div> <script type="text/javascript" src="bundle.js"></script></body> </html>
4.在工程目錄下新建webpack.config.js文件,編輯webpack.config.js文件,編寫以下代碼:
module.exports = { entry: __dirname + "/src/main.js", output: { path: __dirname + "/public", filename: "bundle.js" } }
__dirname是nodejs中的全局變量,指向當前執行腳本的目錄。
module.exports是webpack的對象,其中entry是指定入口文件,這裏指定main.js爲入口文件。output下的path是輸出目錄,filename是輸出文件名稱。經過path和filename組合就能夠將咱們再代碼中引入的模塊完整的輸出到制定的文件中。
5.在控制檯執行webpack命令,就能夠看到bundle.js文件已經輸出到Public目錄下了
這個時候經過瀏覽器打開Index.html能夠看到效果:
上面咱們已經能夠用webpack來打包咱們的模塊,不過這只是剛入門,後面咱們會不斷的完善webpack.config.js這個文件。
從剛纔的例子中,咱們須要本身手動的在html頁面裏面引入bundle.js文件,那麼有沒有自動幫咱們引入文件的功能呢?回答確定是有的,這裏就介紹下Html-webpack-plugin插件。
插件官方地址是:https://www.npmjs.com/package/html-webpack-plugin,這裏只是簡單講解使用。
1.要使用html插件,首先須要在項目中引入該模塊,在控制檯執行命令:
npm install html-webpack-plugin --save-dev
2.編輯webpack.config.js文件,在其中加入如下代碼:
var HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports = { entry: __dirname + "/src/main.js", output: { path: __dirname + "/public", filename: "bundle.js" }, plugins: [ new HtmlWebpackPlugin() ] }
能夠看到,使用require引入html-webpack-plugin,而後在配置中的plugins數組中new一個插件對象。
3.這個時候咱們把public目錄刪除,再在控制檯執行webpack命令,會看到以下:
注意看紅框部分,首先,title已經被修改了插件默認值;其次,id爲app的div已經沒有了。最後,可看到在body末尾插件幫咱們把bundle.js插入。
template屬性
看插件官網,插件有一個template屬性,能夠指定模板文件,插件能按照模板幫咱們插入js或者css引用。
官網地址是:https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md。
看官網描述,默認會有一個ejs的loader會解析模板,至於ejs是什麼?ejs是一個模板語言,在nodejs開發中常常會用到,這裏能夠把ejs徹底當作一個html格式來用。
因此,在src目錄下,咱們新建一個index.temp.ejs文件,並把public下的index.html的內容拷貝到該文件中,並修改至以下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack Example</title> <body> <div id="app" class="custom"></div> </body> </html>
能夠看到,title已經被咱們修改回webpack example了,而且也添加了id爲app的div,還刪除了script,接着,刪除Public下的文件。而後咱們再控制檯輸入webpack,等webpack打包編譯完成,這時public下生成了bundle.js和index.html文件,編輯index.html文件,能夠看到以下信息:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack Example</title> <link href="styles.css" rel="stylesheet"></head> <body> <div id="app" class="custom"></div> <script type="text/javascript" src="bundle.js"></script></body> </html>
在Body末尾,插件自動給咱們把script加上了。
若是咱們也想把css文件也自動插入,那麼就會用到extract-text-webpack插件。
其官網地址是:https://github.com/webpack-contrib/extract-text-webpack-plugin。
官網的usage以下:
const ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) } ] }, plugins: [ new ExtractTextPlugin("styles.css"), ] }
1.首先仍是要先在控制檯輸入命令:
npm install extract-text-webpack-plugin --save-dev。
這裏要注意:官網只提示安裝extract插件,其實在編譯的時候,還須要style-loader和css-loader,因此還要執行命令:
npm install style-loader --save-dev
npm install css-loader --save-dev
2.而後在webpack.config.js文件上面,require一下這個插件
3.按照官網的用法,編寫module節點,最後以下所示:
var HtmlWebpackPlugin = require("html-webpack-plugin"); var ExtractTextWebpackPlugin = require("extract-text-webpack-plugin"); module.exports = { entry: __dirname + "/src/main.js", output: { path: __dirname + "/public", filename: "bundle.js" }, module: { rules: [{ test: /\.css$/, use: ExtractTextWebpackPlugin.extract({ fallback: "style-loader", use: "css-loader" }) }] }, plugins: [ new HtmlWebpackPlugin({ template: "./src/index.temp.ejs" }), new ExtractTextWebpackPlugin("styles.css") ] }
注意:
4.接着,咱們在src目錄下新建一個index.css文件,並編輯編寫以下樣式:
.custom{ font-size: 18px; color: bisque; border: 1px moccasin solid; padding: 5px; }
5.而後,編輯index.temp.ejs文件,在div標籤加入class="custom",以下圖紅框處:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack Example</title> </head> <body> <div id="app" class="custom"></div> </body> </html>
6.編輯main.js文件,在其頂部Import剛纔新建的index.css文件,以下圖:
import Hello from "./hello"; import IndexStyle from "./index.css"; document.getElementById("app").appendChild(Hello());
7.最後,在控制檯輸入命令
webpack
編譯完成後,能夠看到public目錄下生成了style.css文件,編輯index.html文件,能夠看到在Head中引入了Style.css文件,以下圖:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack Example</title> <link href="styles.css" rel="stylesheet"></head> <body> <div id="app" class="custom"></div> <script type="text/javascript" src="bundle.js"></script></body> </html>
在開發中,咱們會不斷的調試頁面和參數,若是每次都是執行webpack命令未免太累了,因此這裏介紹一個開發服務器webpack-dev-server,它提供一個易於部署的服務器環境,而且具備實時重載的功能。
更多的文檔能夠參考:http://www.css88.com/doc/webpack2/guides/development/。
要使用這個功能,首先還先執行npm的安裝命令
npm install webpack-dev-server --save-dev,
執行完成後,編輯package.json文件,添加"start"代碼以下:
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start":"webpack-dev-server --progress" }
"--progress"參數能夠查看當前執行進度,在控制檯輸入"npm start"控制檯會打印日誌信息,最後出現編譯成功,表明服務啓動完成,這時打開http://localhost:8080,能夠看到index.html的內容,以下圖:
這個時候,編輯hello.js,添加一些字符串以下:
export default function () { const hello = document.createElement("div"); hello.textContent = "Hello Webpack!This is my example!" return hello; }
保存後,打開瀏覽器不用刷新,就能夠看到咱們新添加的"This is my example"。