webpack.config.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const Path = require('path')
  2. const WebpackPwaManifest = require('webpack-pwa-manifest')
  3. const VueLoaderPlugin = require('vue-loader/lib/plugin')
  4. const HtmlWebpackPlugin = require('html-webpack-plugin')
  5. const webpack = require('webpack')
  6. const yargs = require('yargs')
  7. const mode = yargs.argv.mode || 'development'
  8. module.exports = {
  9. devtool: 'source-map',
  10. mode: mode,
  11. entry: {
  12. main: [
  13. mode === 'development' && `webpack-hot-middleware/client?path=/__webpack__/__webpack_hmr&timeout=20000`,
  14. Path.join(__dirname, 'app/main.js')
  15. ].filter(x => x)
  16. },
  17. devServer: {
  18. hot: mode === 'development'
  19. },
  20. module: {
  21. rules: [
  22. { test: /\.js$/, loader: 'babel-loader' },
  23. { test: /\.vue$/, loader: 'vue-loader' },
  24. {
  25. test: /\.css$/,
  26. loader: ['vue-style-loader', 'css-loader']
  27. },
  28. {
  29. test: /\.less$/,
  30. loader: ['vue-style-loader', 'css-loader', 'less-loader']
  31. },
  32. {
  33. test: /\.(ttf|woff|woff2|svg|eot)$/,
  34. loader: 'file-loader'
  35. }
  36. ]
  37. },
  38. plugins: [
  39. new VueLoaderPlugin(),
  40. new WebpackPwaManifest({
  41. name: 'CHANGEME',
  42. short_name: 'changeme',
  43. description: 'This is an installable app.',
  44. background_color: '#ffffff',
  45. icons: [
  46. {
  47. src: Path.resolve('app/assets/placeholder_icon.png'),
  48. sizes: [96, 128, 192, 256, 384, 512]
  49. }
  50. ],
  51. inject: true,
  52. orientation: 'omit'
  53. }),
  54. new HtmlWebpackPlugin({
  55. template: Path.join(__dirname, 'app/index.html'),
  56. inject: true,
  57. templateParameters: { }
  58. }),
  59. mode === 'development' && new webpack.HotModuleReplacementPlugin()
  60. ].filter(x => x)
  61. }