webpack区分打包类库代码及代码优化

1.配置文件webpack.config

const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const HTMLPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
const ExtractPlugin = require('extract-text-webpack-plugin')

const isDev = process.env.NODE_ENV =='development'
const config= {
  target:'web',
  entry: path.join(__dirname, "src/index.js"), //输入文件
  output: {
    filename: "build.[hash:8].js", //输出文件
    path: path.join(__dirname, 'dist') //输出路径
  },
  module:{
    rules:[
      {
        test:/\.vue$/,
        loader:'vue-loader'
      },{
        test: /\.jsx$/,
        loader: 'babel-loader'
      },
      {
        test:/\.(gif|png|jpg|jpeg|svg)$/,
        use:[{
          loader:'url-loader',
          options:{
            limit:1024,
            name:'[name]-[hash].[ext]'
          }
        }]
      },
     
    ]
  },
  plugins: [
    // make sure to include the plugin for the magic
    new VueLoaderPlugin(),
    new webpack.DefinePlugin({
      'process.env':{
        NODE_ENV:isDev?'"development"':'"production"',
      }
    }),
    new HTMLPlugin(),
  ],
}

if(isDev){
  config.module.rules.push({
       test: /\.styl/,
       use: ['style-loader', 'css-loader', {
         loader: 'postcss-loader',
         options: {
           sourceMap: true
         }
       }, 'stylus-loader']
  })
  config.devtool='#cheap-module-eval-source-map',
  config.devServer={
    port:8000,
    host:'0.0.0.0',
    overlay:{
      errors:true
    },
    // open:true   //每次都打开一个网页
    hot:true //只渲染一个组件
  }
  config.plugins.push(
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
  )
}else{
  config.entry={
    app:path.join(__dirname,'src/index.js'),
    vendor:['vue']
  }
  config.output.filename = '[name].[chunkhash:8].js'
  config.module.rules.push(
     {
       test: /\.styl/,
       use:ExtractPlugin.extract({
         fallback:'style-loader',
         use:[
            'css-loader', 
            {
              loader: 'postcss-loader',
              options: {
                sourceMap: true
              }
            },
            'stylus-loader'
         ]
       })
     }
  )
  config.optimization={
      splitChunks: {
        cacheGroups: {
          commons: {
            name: "vendor",
            chunks: "initial",
            minChunks: 2
          }
        }
      }
    }
 config.optimization = {
      splitChunks: {
        cacheGroups: {
          commons: {
            name: "runtime",
            chunks: "initial",
            minChunks: 2
          }
        }
      }
    }
  config.plugins.push(
    new ExtractPlugin('styles.[name].css'),
    // new webpack.optimize.CommonsChunkPlugin({
    //   name:'vendor'
    // })
  )
}
module.exports=config

你可能感兴趣的:(webpack区分打包类库代码及代码优化)