dev.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. const path = require('path')
  2. const ip = require('ip')
  3. const webpack = require('webpack')
  4. const HtmlWebpackPlugin = require('html-webpack-plugin')
  5. const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin')
  6. const config = require('../config')
  7. const clientOptions = '?path=/__what&timeout=5000&reload=true&quiet=true'
  8. const VueLoaderPlugin = require('vue-loader/lib/plugin')
  9. module.exports = {
  10. mode: 'development',
  11. entry: [
  12. `webpack-hot-middleware/client${clientOptions}`,
  13. path.resolve(__dirname, '../../src/index.js'),
  14. ],
  15. output: {
  16. filename: 'bundle.js',
  17. publicPath: config.dev.publicPath,
  18. },
  19. module: {
  20. rules: [
  21. {
  22. test: /\.css$/i,
  23. use: [
  24. 'style-loader',
  25. {
  26. loader: 'css-loader',
  27. options: {
  28. importLoaders: 1,
  29. },
  30. },
  31. 'postcss-loader',
  32. ],
  33. },
  34. {
  35. test: /\.s[ac]ss$/i,
  36. use: [
  37. 'style-loader',
  38. {
  39. loader: 'css-loader',
  40. options: {
  41. importLoaders: 2,
  42. },
  43. },
  44. 'postcss-loader',
  45. 'sass-loader',
  46. ],
  47. },
  48. {
  49. test: /\.(png|jpe?g|gif|svg)$/i,
  50. loader: 'file-loader',
  51. },
  52. {
  53. test: /\.(ttf|otf|woff2?|eot)$/i,
  54. loader: 'file-loader',
  55. },
  56. {
  57. test: /\.(mp4|mp3)$/i,
  58. loader: 'file-loader',
  59. },
  60. {
  61. test: /\.js$/,
  62. enforce: 'pre',
  63. exclude: /node_modules/,
  64. loader: 'eslint-loader',
  65. },
  66. {
  67. test: /\.js$/,
  68. exclude: /node_modules/,
  69. loader: 'babel-loader',
  70. },
  71. {
  72. test: /\.vue$/,
  73. loader: 'vue-loader',
  74. },
  75. ],
  76. },
  77. externals: {
  78. vue: 'Vue',
  79. },
  80. resolve: {
  81. extensions: [
  82. '.js',
  83. '.vue',
  84. ],
  85. alias: {
  86. '@': path.resolve(__dirname, '../../src'),
  87. },
  88. },
  89. devtool: 'inline-source-map',
  90. plugins: [
  91. new HtmlWebpackPlugin({
  92. template: config.template,
  93. }),
  94. new VueLoaderPlugin(),
  95. new webpack.DefinePlugin({
  96. 'process.env': config.dev.env,
  97. }),
  98. new webpack.HotModuleReplacementPlugin(),
  99. new FriendlyErrorsWebpackPlugin({
  100. compilationSuccessInfo: {
  101. messages: [
  102. `http://localhost:${config.port} or http://${ip.address()}:${config.port}`,
  103. ],
  104. },
  105. }),
  106. ],
  107. }