小生愛

    

    
        const webpack = require('webpack')
        const path = require('path')
        // 非webpack 自带插件 需要引入后使用
        const ExtractTextPlugin = require("extract-text-webpack-plugin")

        module.exports = {
          // context: 如果不通过path.resolve 配置入口访问路径 watch: true失效
          context: path.resolve('./app'),

          entry: {
            index: './index',
            mobile: './mobile',
            public: ['jquery', 'vue']
          },

          output: {
            // filename: 编译的文件名 仅用于命名每个文件
            // [name]: 多入口形式 入口文件名替换这里的name 
            // [chunkhash: num]: 入口文件的hash值 用于修改后清空缓存
            // filename: '[name].[chunkhash:3].js',
            filename: '[name].js',
            // 包存放的目录
            path: path.resolve('./scripts')
          },

          module: {
            rules: [
              {
                // 这里必须要添加 $ 否则匹配时 可能匹配到别的代码 有可能报错
                test: /\.(css)$/,
                use: ExtractTextPlugin.extract({
                  // cnpm install postcss-smart-import precss autoprefixer --save-dev
                  // postcss-loader: (Autoprefixer 需要用这个插件)自动补全 CSS前缀
                  use: ['css-loader']
                })
              },

              {
                // 这里必须要添加 $ 否则匹配时 可能匹配到别的代码 有可能报错
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                  // postcss-loader: 自动补全 CSS前缀 sass必须在postcss-loader前面 less不需要
                  use: ['css-loader', 'less-loader']
                })
              }
            ]
          },

          plugins: [
            new webpack.optimize.CommonsChunkPlugin({
              // 公共模块名称 有多个 使用数组
              // 匹配entry 入口文件名 相同的单独打包 其他模块统一抽取公共代码到commons.js中
              // css文件默认打包到一个公共CSS里 common.css
              // 公共文件也必须在在这里打包 否则公共文件会出现在其他文件里
              names: ['commons', 'public']
            }),

            // ExtractTextPlugin 对每个入口 chunk 都生成对应的一个文件 
            // 所以当你配置多个入口 chunk时 你必须使用 [name] [id] [contenthash]
            new ExtractTextPlugin({
              // filename: 提取后的css名称
              //    [name]: chunk 的文件名
              //    [contenthash: num]: 提取文件根据内容生成的哈
              // * 路径相对于 output里的path
              // filename: '../styles/[name].[contenthash:3].css'
              filename: '../styles/[name].css'
            })
          ],

          resolve: {
            // 创建import || require 引用文件路径的别名
            // 这里引用sub.js 可以是 import 'src/sub.js'
            alias: {
              // 绝对路径模式 需要使用 path.resolve
              src: path.resolve(__dirname, 'app/src/'),
              css: path.resolve(__dirname, 'css/'),
              // 相对路径模式 不适用 path.resolve || __dirname
              // xyz '文件路径' 直接饮用node_module里的文件
              // import vue from 'xyz/vue.js'
              xyz: 'vue/dist/'
            },
            // 默认扩展名 默认为 ['.js', '.json']
            extensions: ['.js', '.json', '.css']
          },
          
          watch: true
        }