webpack.config.base.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. 'use strict'
  2. const HtmlWebpackPlugin = require('html-webpack-plugin')
  3. const CopyWebpackPlugin = require('copy-webpack-plugin')
  4. const { VueLoaderPlugin } = require('vue-loader')
  5. const utils = require('./utils')
  6. module.exports = {
  7. resolve: {
  8. extensions: ['.js', '.vue', '.json'],
  9. alias: {
  10. 'assets': utils.resolve('assets'),
  11. 'pages': utils.resolve('src/pages'),
  12. 'static': utils.resolve('static'),
  13. 'components': utils.resolve('src/components'),
  14. 'api': utils.resolve('src/api')
  15. }
  16. },
  17. module: {
  18. rules: [
  19. {
  20. test: /\.(js|vue)$/,
  21. use: 'eslint-loader',
  22. enforce: 'pre'
  23. }, {
  24. test: /\.vue$/,
  25. use: 'vue-loader'
  26. }, {
  27. test: /\.js$/,
  28. use: {
  29. loader: 'babel-loader',
  30. }
  31. }, {
  32. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  33. use: {
  34. loader: 'url-loader',
  35. options: {
  36. limit: 10000,
  37. name: utils.assetsPath('img/[name].[hash:7].[ext]')
  38. }
  39. }
  40. }, {
  41. test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
  42. use: {
  43. loader: 'url-loader',
  44. options: {
  45. limit: 10000,
  46. name: utils.assetsPath('media/[name].[hash:7].[ext]')
  47. }
  48. }
  49. }, {
  50. test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
  51. use: {
  52. loader: 'url-loader',
  53. options: {
  54. limit: 10000,
  55. name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
  56. }
  57. }
  58. }
  59. ]
  60. },
  61. plugins: [
  62. new HtmlWebpackPlugin({
  63. filename: 'index.html',
  64. template: 'index.html',
  65. inject: true
  66. }),
  67. new VueLoaderPlugin(),
  68. new CopyWebpackPlugin([{
  69. from: utils.resolve('static/img'),
  70. to: utils.resolve('dist/static/img'),
  71. toType: 'dir'
  72. }])
  73. ]
  74. }