webpack.mix.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. const mix = require('laravel-mix')
  2. const webpack = require('webpack')
  3. const glob = require('glob-all')
  4. const PurgecssPlugin = require('purgecss-webpack-plugin')
  5. const whitelister = require('purgecss-whitelister')
  6. require('laravel-mix-bundle-analyzer')
  7. require('laravel-mix-purgecss')
  8. require('laravel-mix-vue-svgicon')
  9. mix.disableNotifications()
  10. class Extractor {
  11. static extract(content) {
  12. return content.match(/[A-Za-z0-9-_:\/]+/g) || []
  13. }
  14. }
  15. mix.webpackConfig({
  16. optimization: {
  17. providedExports: true,
  18. usedExports: true,
  19. sideEffects: true
  20. },
  21. output: {
  22. filename: '[name].js',
  23. chunkFilename: 'js/chunks/[name].js?id=[chunkhash]'
  24. },
  25. plugins: [
  26. new PurgecssPlugin({
  27. paths: glob.sync([
  28. path.join(__dirname, 'resources/views/**/*.blade.php'),
  29. path.join(__dirname, 'resources/js/**/*.vue'),
  30. ]),
  31. extractors: [
  32. {
  33. extractor: Extractor,
  34. extensions: ['html', 'js', 'php', 'vue'],
  35. },
  36. ],
  37. whitelist: whitelister([
  38. './node_modules/vuetify/dist/vuetify.min.css',
  39. './node_modules/toastr/build/toastr.css'
  40. ]),
  41. whitelistPatterns: [
  42. /.*q-*/,
  43. /.*relative-position*/,
  44. /.*expand-*/,
  45. /.*vue-grid*/
  46. ]
  47. })
  48. ]
  49. })
  50. mix.babelConfig({
  51. presets: [
  52. [
  53. '@babel/preset-env',
  54. {
  55. modules: false
  56. }
  57. ]
  58. ]
  59. })
  60. /*
  61. |--------------------------------------------------------------------------
  62. | Mix Asset Management
  63. |--------------------------------------------------------------------------
  64. |
  65. | Mix provides a clean, fluent API for defining some Webpack build steps
  66. | for your Laravel application. By default, we are compiling the Sass
  67. | file for the application as well as bundling up all the JS files.
  68. |
  69. */
  70. mix.js('resources/js/app.js', 'public/js')
  71. .sass('resources/sass/app.scss', 'public/css')
  72. .options({
  73. processCssUrls: false
  74. })
  75. .svgicon('public/img')
  76. .version()
  77. //mix.bundleAnalyzer()