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映射文件,告知哪些模块被最终打包到哪里了