var HtmlWebpackPlugin = require('html-webpack-plugin'); var WebpackDevServer = require('webpack-dev-server'); var ExtracTextPlugin = require('extract-text-webpack-plugin'); var UglifyJSPlugin = require('uglifyjs-webpack-plugin'); var CleanPlugin = require('clean-webpack-plugin'); var webpack = require('webpack'); var path = require('path'); //获得NODE_ENV参数,用于判断处于开发模式还是打包模式 var isDev = process.env.NODE_ENV === 'develement'; var config = { //打包入口 entry: { app: path.join(__dirname, 'src/app.js'), vendor: ['vue','vue-router','mint-ui'], }, output: { path: path.join(__dirname, 'www'), //输出路径 filename: '[name]-[chunkhash:8].js' //输出文件名,相对于输出路径 }, //loader用于将非js文件转换为有效模块 module: { rules: [ { test: /\.(jpeg|jpg|png|gif|svg)$/, use: [{ loader: 'url-loader', options: { name: './img/[chunkhash]-[name].[ext]' } }] }, { test: /\.vue$/, use: [{ loader: 'vue-loader', }] }, { test: /\.(htm|html)$/, use: [{ loader: 'html-withimg-loader', }] }, { test: /\.scss/, use: ExtracTextPlugin.extract({ use: [{ loader: 'css-loader' }, { loader: 'sass-loader' }] }) }, { test: /\.css/, use: ExtracTextPlugin.extract({ use: [{ loader: 'css-loader' }] }) } ] }, //plugin,添加插件 plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: isDev ? '"develement"' : '"production"' } }), new HtmlWebpackPlugin({ template: './src/index.html' }), new UglifyJSPlugin({ sourceMap: true, uglifyOptions: { ecma: 8 } }), new ExtracTextPlugin('style-[contentHash:8].css'), new webpack.optimize.CommonsChunkPlugin({ name: 'vendor' }), new webpack.optimize.CommonsChunkPlugin({ name: 'runtime' }), ] } //dev模式 if (isDev) { //webpack-dev-server不能使用chunkhash,否则会报错 config.output.filename = '[name]-[hash].js'; config.devtool = '#cheap-module-eval-source-map' config.plugins.push( new webpack.HotModuleReplacementPlugin(), //热更新插件 new webpack.NoEmitOnErrorsPlugin() //防止错误信息导致webpack退出 ) //启动开发服务器 config.devServer = { contentBase: path.join(__dirname, 'dist'), compress: true, port: 8080, hot: true, open: true } } else { config.plugins.push(new CleanPlugin(['www'])) } module.exports = config;