webpack就是一个打包工具,可以将多个js、css、图片、coffeescript、less等合并在一起,在调用时就加载一条js文件就行。
推荐同时全,局部安装
npm install -g webpack npm install webpack
安装完成后
webpack -h //有提示说明安装完成
假如网站的目录结构是这样:

在根目录手动创建webpack.config.js
var webpack = require('webpack'); // 加载webpack模块是为了能使用,其内置的插件如BannerPlugin var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin"); //将公共部分JS提取出来独立为一个JS var autoprefixer = require('autoprefixer'); //自动添加css前缀 npm install autoprefixer module.exports = { entry: './entry.js', //文件入口,所有的css、js、图片和模块都统一加载在此文件。 output: { path: __dirname+'/out/', //压缩合并输出后存放的目录 filename: 'bundle.js', //文件出口,压缩合并后文件的名字 libraryTarget: 'amd' // 输出后的文件bundle.js变成amd模块,就可以在requirejs插件中直接引入使用了 }, module: { //压缩合并js以外的内容,如css、图片、coffeescript、less等对应的还要安装相应的模块 loaders: [ //如果希望css和跟js一样统一压缩到一起就需要额外安装 npm install css-loader style-loader postcss-loader {test: /\.css$/, loader: "style-loader!css-loader!postcss-loader"} //webpack要识别处理css要依赖模块才行,多个模块之间要使用! //limit=8192”表示将所有小于8kb的图片都转为base64形式,在out目录下生成大于8KB的img图片 //(其实应该说超过8kb的才使用 url-loader 来映射到文件,否则转为data url形式) //npm install url-loader npm install file-loader { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192&name=img/[hash:8].[name].[ext]'} ] }, postcss: [ autoprefixer({ browsers: ['> 0%'] }) ], //自动添加css前缀 plugins: [ //扩展webpack额外的功能,要使用webpack自带插件就引入webpack,其他功能的话就额外安装其他插件 new webpack.BannerPlugin('这个插件功能是头部提示功能'), new CommonsChunkPlugin("commons.js", ["js1", "js2", "js3"]), //js1.js js2.js js3.js公共部分独立出来取名为commons.js new webpack.optimize.UglifyJsPlugin({compress: {warnings: false}}), //webpack自带的压缩代码功能 new webpack.ProvidePlugin({ //使用sudo npm install jquery@1.11.0,来调用jq,并将jq暴露打包文件全局中,相当于给window加了jquery $:"jquery", jQuery:"jquery", "window.jQuery":"jquery" }), new webpack.NoErrorsPlugin(), //不提示报错信息 new webpack.optimize.DedupePlugin() //避免加载重复模块 ], resolve: { //查找module的话从这里开始查找 root: 'E:/github/flux-example/src', //绝对路径 //自动扩展文件后缀名,意味着我们require模块可以省略不写后缀名 extensions: ['', '.js', '.json', '.scss'], //模块别名定义,方便后续直接引用别名,无须多写长长的地址 alias: { AppStore : 'js/stores/AppStores.js',//后续直接 require('AppStore') 即可 ActionType : 'js/actions/ActionType.js', AppAction : 'js/actions/AppAction.js' } }, watch: true //每次修改文件,就不需要次次都执行webpack了,或者webpack --watch }
入口文件:
//entry.js if(!Function.prototype.bind){ Function.prototype.bind = function(){ var fn = this, args = [].slice.call(arguments), object = args.shift(); return function(){ return fn.apply(object,args.concat([].slice.call(arguments))); }; }; } if (!Array.prototype.filter){ Array.prototype.filter = function(fun /*, thisp*/){ var len = this.length; if (typeof fun != "function") throw new TypeError(); var res = new Array(); var thisp = arguments[1]; for (var i = 0; i < len; i++){ if (i in this){ var val = this[i]; // in case fun mutates this if (fun.call(thisp, val, i, this)) res.push(val); } } return res; }; } //以上判断是为了兼容ie8 require("./style.css"); require("./style1.css"); //require("jquery"); 在使用webpack中要使用jq推荐使用sudo npm install jquery@1.11.0,来使用 require('./module1')
其他模块(js,css,图片等等都视为模块)
// 1.html <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="./out/bundle.js"></script> </head> <body> <div id="big"></div> <div id="lititle"></div> </body> </html>
//module1.js $(function () { document.title=$().jquery; });
//style.css body{background: yellow}
//style1.css div{border: 5px solid red;} #big{height: 500px;width: 800px} #lititle{height: 100px;width: 100px}
准备工作好了之后 在根目录下输入
webpack //系统会默认去找webpack.config.js配置文件 webpack // 最基本的启动webpack的方法 webpack -w // 提供watch方法;实时进行打包更新 webpack -p // 对打包后的文件进行压缩 webpack -d // 提供source map,方便调式代码 webpack --config webpack.config.js //单独运行webpack.config.js文件,这种情况可以是在运行多个项目的时候使用 webpack --watch -webpack.config.js //时时监听文件更新运行webpack方法
成功运行的提示都这样

此时目录下生成了一个js文件如:

1.html页面只要加载了这个bundle.js就相当于加载了css,js,图片所有的资源了
发布服务器
webpack还提供了本地发布测试的功能,一旦修改了文件就自动压缩合并和页面自动刷新,并且还提供了类似iis、apache发布的功能。
参考学习网站:
http://zhaoda.net/webpack-handbook/preface.html
http://www.w2bc.com/Article/50764
http://blog.csdn.net/yczz/article/details/49250623