webpack.config.base.js 2.1 KB

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