webpack.config.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. var HtmlWebpackPlugin = require('html-webpack-plugin');
  2. var WebpackDevServer = require('webpack-dev-server');
  3. var ExtracTextPlugin = require('extract-text-webpack-plugin');
  4. var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
  5. var CleanPlugin = require('clean-webpack-plugin');
  6. var webpack = require('webpack');
  7. var path = require('path');
  8. //获得NODE_ENV参数,用于判断处于开发模式还是打包模式
  9. var isDev = process.env.NODE_ENV === 'develement';
  10. var config = {
  11. //打包入口
  12. entry: {
  13. app: path.join(__dirname, 'src/app.js'),
  14. vendor: ['vue','vue-router','mint-ui'],
  15. },
  16. output: {
  17. path: path.join(__dirname, 'www'), //输出路径
  18. filename: '[name]-[chunkhash:8].js' //输出文件名,相对于输出路径
  19. },
  20. //loader用于将非js文件转换为有效模块
  21. module: {
  22. rules: [
  23. {
  24. test: /\.(jpeg|jpg|png|gif|svg)$/,
  25. use: [{
  26. loader: 'url-loader',
  27. options: {
  28. name: './img/[chunkhash]-[name].[ext]'
  29. }
  30. }]
  31. },
  32. {
  33. test: /\.vue$/,
  34. use: [{
  35. loader: 'vue-loader',
  36. }]
  37. },
  38. {
  39. test: /\.(htm|html)$/,
  40. use: [{
  41. loader: 'html-withimg-loader',
  42. }]
  43. },
  44. {
  45. test: /\.scss/,
  46. use: ExtracTextPlugin.extract({
  47. use: [{
  48. loader: 'css-loader'
  49. }, {
  50. loader: 'sass-loader'
  51. }]
  52. })
  53. },
  54. {
  55. test: /\.css/,
  56. use: ExtracTextPlugin.extract({
  57. use: [{
  58. loader: 'css-loader'
  59. }]
  60. })
  61. }
  62. ]
  63. },
  64. //plugin,添加插件
  65. plugins: [
  66. new webpack.DefinePlugin({
  67. 'process.env': {
  68. NODE_ENV: isDev ? '"develement"' : '"production"'
  69. }
  70. }),
  71. new HtmlWebpackPlugin({
  72. template: './src/index.html'
  73. }),
  74. new UglifyJSPlugin({
  75. sourceMap: true,
  76. uglifyOptions: {
  77. ecma: 8
  78. }
  79. }),
  80. new ExtracTextPlugin('style-[contentHash:8].css'),
  81. new webpack.optimize.CommonsChunkPlugin({
  82. name: 'vendor'
  83. }),
  84. new webpack.optimize.CommonsChunkPlugin({
  85. name: 'runtime'
  86. }),
  87. ]
  88. }
  89. //dev模式
  90. if (isDev) {
  91. //webpack-dev-server不能使用chunkhash,否则会报错
  92. config.output.filename = '[name]-[hash].js';
  93. config.devtool = '#cheap-module-eval-source-map'
  94. config.plugins.push(
  95. new webpack.HotModuleReplacementPlugin(), //热更新插件
  96. new webpack.NoEmitOnErrorsPlugin() //防止错误信息导致webpack退出
  97. )
  98. //启动开发服务器
  99. config.devServer = {
  100. contentBase: path.join(__dirname, 'dist'),
  101. compress: true,
  102. port: 8080,
  103. hot: true,
  104. open: true
  105. }
  106. } else {
  107. config.plugins.push(new CleanPlugin(['www']))
  108. }
  109. module.exports = config;