webpack.base.config.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const path = require('path');
  2. const DefinePlugin = require('webpack').DefinePlugin;
  3. const { VueLoaderPlugin } = require('vue-loader');
  4. const appdir = require('./appdir');
  5. const clientDir = path.resolve(__dirname, '../client');
  6. module.exports = {
  7. resolve: {
  8. alias: {
  9. ws: false,
  10. }
  11. },
  12. entry: [`${clientDir}/main.js`],
  13. output: {
  14. publicPath: `/${appdir}/`,
  15. clean: true
  16. },
  17. module: {
  18. rules: [
  19. {
  20. test: /\.vue$/,
  21. loader: 'vue-loader',
  22. },
  23. {
  24. test: /\.js$/,
  25. loader: 'babel-loader',
  26. exclude: /node_modules/,
  27. options: {
  28. presets: [['@babel/preset-env', { targets: { esmodules: true } }]],
  29. plugins: [
  30. ['@babel/plugin-proposal-decorators', { legacy: true }]
  31. ]
  32. }
  33. },
  34. {
  35. test: /\.(gif|png)$/,
  36. type: 'asset/inline',
  37. },
  38. {
  39. test: /\.jpg$/,
  40. type: 'asset/resource',
  41. generator: {
  42. filename: 'images/[name]-[hash:6][ext]'
  43. },
  44. },
  45. {
  46. test: /\.(ttf|eot|woff|woff2)$/,
  47. type: 'asset/resource',
  48. generator: {
  49. filename: 'fonts/[name]-[hash:6][ext]'
  50. },
  51. },
  52. ]
  53. },
  54. plugins: [
  55. new DefinePlugin({
  56. __VUE_OPTIONS_API__: true,
  57. __VUE_PROD_DEVTOOLS__: false,
  58. __QUASAR_SSR__: false,
  59. __QUASAR_SSR_SERVER__: false,
  60. __QUASAR_SSR_CLIENT__: false,
  61. __QUASAR_VERSION__: false,
  62. }),
  63. new VueLoaderPlugin(),
  64. ]
  65. };