1、什麼是webpack? 他有什麼優勢?javascript
首先對於不少剛接觸webpack人來講,確定會問webpack是什麼?它有什麼優勢?咱們爲何要使用它?帶着這些問題,咱們來總結下以下:css
Webpack是前端一個工具,可讓各個模塊進行加載,預處理,再進行打包,它能有Grunt或Gulp全部基本功能。優勢以下:html
二:如何安裝和配置前端
1.咱們常規直接使用 npm 的形式來安裝:java
$ npm install webpack -gwebpack
固然若是常規項目仍是把依賴寫入 package.json 包去更人性化:git
$ npm init
$ npm install webpack --save-devgithub
2.配置webpackweb
每一個項目下都必須配置有一個 webpack.config.js ,它的做用如同常規的 gulpfile.js/Gruntfile.js ,就是一個配置項,告訴 webpack 它須要作什麼。正則表達式
var webpack = require('webpack'); var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js'); module.exports = { //插件項 plugins: [commonsPlugin], //頁面入口文件配置 entry: { index : './src/js/page/index.js' }, //入口文件輸出配置 output: { path: 'dist/js/page', filename: '[name].js' }, module: { //加載器配置 loaders: [ { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.js$/, loader: 'jsx-loader?harmony' }, { test: /\.scss$/, loader: 'style!css!sass?sourceMap'}, { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} ] }, //其它解決方案配置 resolve: { root: 'E:/github/flux-example/src', //絕對路徑 extensions: ['', '.js', '.json', '.scss'], alias: { AppStore : 'js/stores/AppStores.js', ActionType : 'js/actions/ActionType.js', AppAction : 'js/actions/AppAction.js' } } };
配置說明:
1).entry
能夠是個字符串或數組或者是對象。
當entry是個字符串的時候,用來定義入口文件:
entry: './js/main.js'
當entry是個數組的時候,裏面一樣包含入口js文件,另一個參數能夠是用來配置webpack提供的一個靜態資源服務器,webpack-dev-server。webpack-dev-server會監控項目中每個文件的變化,實時的進行構建,而且自動刷新頁面:
entry: [ 'webpack/hot/only-dev-server', './js/app.js' ]
2).output
參數是個對象,用於定義構建後的文件的輸出。其中包含path和filename:
output: { path: 'dist/js/page', filename: '[name].js' },
3).module
關於模塊的加載相關,咱們就定義在module.loaders中。這裏經過正則表達式去匹配不一樣後綴的文件名,而後給它們定義不一樣的加載器。好比說給less文件定義串聯的三個加載器(!用來定義級聯關係):
module: { //加載器配置 loaders: [ { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.js$/, loader: 'jsx-loader?harmony' }, { test: /\.scss$/, loader: 'style!css!sass?sourceMap'}, { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} ] },
4).resolve
webpack在構建包的時候會按目錄的進行文件的查找,resolve屬性中的extensions數組中用於配置程序能夠自行補全哪些文件後綴:
resolve: { root: 'E:/github/flux-example/src', //絕對路徑 extensions: ['', '.js', '.json', '.scss'], alias: { AppStore : 'js/stores/AppStores.js', ActionType : 'js/actions/ActionType.js', AppAction : 'js/actions/AppAction.js' } }
3、運行 webpack
ebpack 的執行也很簡單,直接執行
$ webpack --display-error-details
便可,後面的參數「--display-error-details」是推薦加上的,方便出錯時能查閱更詳盡的信息(好比 webpack 尋找模塊的過程),從而更好定位到問題。
其餘主要的參數有:
$ webpack --config XXX.js //使用另外一份配置文件(好比webpack.config2.js)來打包 $ webpack --watch //監聽變更並自動打包 $ webpack -p //壓縮混淆腳本,這個很是很是重要! $ webpack -d //生成map映射文件,告知哪些模塊被最終打包到哪裏了