webpack详细配置讲解

//常见的Webpack配置文件
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');
module.exports = {
    /**
     * entry可以是字符串、数组、对象
     *  string 用来定义入口文件
     *  array  
     *  object 将不同的文件构建成不同的文件,按需使用
     */
    entry:'./js/main.js',

    /**
     * output参数是对象
     */
    output:{
        path:'', //打包后文件存放的路径
        publicPath: "/static/build/",  //webpack-dev-server访问的路径
        filename:'', // 打包后的文件名
        chunkFilename: "bundle-[id].js"   //输出chunk文件名
    },

    //模块加载器
    module:{
        noParse: [],            // 忽略解析的文件
        preLoaders: [{          // 预加载的模块
            test: /\.jsx$/,
            exclude: /node_modules/,
            loader: 'jsxhint-loader'
        }],
        loaders:[
            {
                test:/.js$/, // 正则表达式
                  loader:'babel',  // babel加载器
                  include:_dirname+'/src', //包含什么文件
                  exclude:'/node_modules/' //什么文件夹除外
            },
            {
                //匹配正则表达式
                test: /\.(png|jpg|jpeg)$/,
                //限制在8K范围内用url-loader
                  loader: 'url-loader?limit=8192'
            },
             //.css 文件使用 style-loader 和 css-loader 来处理
            {
                test: /\.css$/,
                //-loader其实是可以省略不写的,多个loader之间用'!'连接起来
                loader: 'style-loader!css-loader'
            },
        ],
    },

    //显示指出依赖查找路径
    resolve:{
        //查找module的话从这里开始查找
        root: 'E:/github/flux-example/src', //绝对路径
        //自动补全请求文件模块后缀 require('common')==require('common.js')
        extensions:['','.js','.json','.css'],
        //模块别名定义,方便后续直接引用别名,无须多写长长的地址
        alias: {
            //后续直接 require('AppStore') 即可
            AppStore : 'js/stores/AppStores.js',
            ActionType : 'js/actions/ActionType.js',
            AppAction : 'js/actions/AppAction.js'
        }
    },

    //请求第三方库或API时,不被构建到运行时文件中 申明为外部依赖并指定别名
    externals:{
        "jquery":"jQuery"
    },

    //配置引入到项目当中的webpack插件
    plugins:[
        //给输出的文件头部添加注释信息
        new webpack.BannerPlugin('This file is created by zhaoda'),
        //提取公用代码块
        new CommonsChunkPlugin("admin-commons.js", ["ap1", "ap2"]),
        commonsPlugin,
        //
        new HtmlWebpackPlugin({
          template: __dirname + "/app/index.tmpl.html"
        }),
        //热加载插件
          new webpack.HotModuleReplacementPlugin(),
          //为组件分配ID
          new webpack.optimize.OccurenceOrderPlugin(),
        // 压缩js插件
        new webpack.optimize.UglifyJsPlugin(),
        //生成单独的css文件
        new ExtractTextPlugin("[name]-[hash].css")
    ],

     //使用webpack-dev-server,提高开发效率
    devServer: {
        contentBase: './',
        host: 'localhost',
        port: 3200, //比如我是监听3200端口
        inline: true, //可以监控js变化
        hot: true, //热启动
    }
}

posted @ 2016-11-30 16:50  cygnet  阅读(531)  评论(0编辑  收藏  举报