webpack.config.base.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. }
  15. },
  16. module: {
  17. rules: [
  18. {
  19. test: /\.(js|vue)$/,
  20. use: 'eslint-loader',
  21. enforce: 'pre'
  22. }, {
  23. test: /\.vue$/,
  24. use: 'vue-loader'
  25. }, {
  26. test: /\.js$/,
  27. use: {
  28. loader: 'babel-loader',
  29. }
  30. }, {
  31. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  32. use: {
  33. loader: 'url-loader',
  34. options: {
  35. limit: 10000,
  36. name: utils.assetsPath('img/[name].[hash:7].[ext]')
  37. }
  38. }
  39. }, {
  40. test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
  41. use: {
  42. loader: 'url-loader',
  43. options: {
  44. limit: 10000,
  45. name: utils.assetsPath('media/[name].[hash:7].[ext]')
  46. }
  47. }
  48. }, {
  49. test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
  50. use: {
  51. loader: 'url-loader',
  52. options: {
  53. limit: 10000,
  54. name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
  55. }
  56. }
  57. }
  58. ]
  59. },
  60. plugins: [
  61. new HtmlWebpackPlugin({
  62. filename: 'index.html',
  63. template: 'index.html',
  64. inject: true
  65. }),
  66. new VueLoaderPlugin(),
  67. new CopyWebpackPlugin([{
  68. from: utils.resolve('static/img'),
  69. to: utils.resolve('dist/static/img'),
  70. toType: 'dir'
  71. }])
  72. ]
  73. }