webpack.config.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const path = require('path');
  2. const glob = require('glob');
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  4. const TerserPlugin = require('terser-webpack-plugin');
  5. const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  6. const CopyWebpackPlugin = require('copy-webpack-plugin');
  7. module.exports = (env, options) => {
  8. const devMode = options.mode !== 'production';
  9. return {
  10. optimization: {
  11. minimizer: [
  12. new TerserPlugin({ cache: true, parallel: true, sourceMap: devMode }),
  13. new OptimizeCSSAssetsPlugin({})
  14. ]
  15. },
  16. entry: {
  17. 'app': glob.sync('./vendor/**/*.js').concat(['./js/app.js'])
  18. },
  19. output: {
  20. filename: '[name].js',
  21. path: path.resolve(__dirname, '../priv/static/js'),
  22. publicPath: '/js/'
  23. },
  24. devtool: devMode ? 'source-map' : undefined,
  25. module: {
  26. rules: [
  27. {
  28. test: /\.js$/,
  29. exclude: /node_modules/,
  30. use: {
  31. loader: 'babel-loader'
  32. }
  33. },
  34. {
  35. test: /\.[s]?css$/,
  36. use: [
  37. MiniCssExtractPlugin.loader,
  38. 'css-loader',
  39. 'sass-loader',
  40. ],
  41. }
  42. ]
  43. },
  44. plugins: [
  45. new MiniCssExtractPlugin({ filename: '../css/app.css' }),
  46. new CopyWebpackPlugin([{ from: 'static/', to: '../' }])
  47. ]
  48. }
  49. };