webpack.mix.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. /.*v-*/
  43. ]
  44. })
  45. ]
  46. })
  47. mix.babelConfig({
  48. presets: [
  49. [
  50. '@babel/preset-env',
  51. {
  52. modules: false
  53. }
  54. ]
  55. ]
  56. })
  57. /*
  58. |--------------------------------------------------------------------------
  59. | Mix Asset Management
  60. |--------------------------------------------------------------------------
  61. |
  62. | Mix provides a clean, fluent API for defining some Webpack build steps
  63. | for your Laravel application. By default, we are compiling the Sass
  64. | file for the application as well as bundling up all the JS files.
  65. |
  66. */
  67. mix.js('resources/js/app.js', 'public/js')
  68. .sass('resources/sass/app.scss', 'public/css')
  69. .options({
  70. processCssUrls: false
  71. })
  72. .svgicon('public/img')
  73. .version()
  74. //mix.bundleAnalyzer()