webpack.config.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const path = require('path');
  2. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  3. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  4. const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  5. const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
  6. const StyleLintPlugin = require('stylelint-webpack-plugin');
  7. module.exports = {
  8. context: __dirname,
  9. entry: {
  10. frontend: ['./src/index.js', './src/sass/style.scss'],
  11. customizer: './src/customizer.js'
  12. },
  13. output: {
  14. path: path.resolve(__dirname, 'public'),
  15. filename: '[name]-bundle.js'
  16. },
  17. mode: 'development',
  18. devtool: 'cheap-eval-source-map',
  19. module: {
  20. rules: [
  21. {
  22. enforce: 'pre',
  23. exclude: /node_modules/,
  24. test: /\.jsx$/,
  25. loader: 'eslint-loader'
  26. },
  27. {
  28. test: /\.jsx?$/,
  29. loader: 'babel-loader'
  30. },
  31. {
  32. test: /\.s?css$/,
  33. use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
  34. },
  35. {
  36. test: /\.svg$/,
  37. loader: 'svg-sprite-loader',
  38. options: {
  39. extract: true,
  40. spriteFilename: 'svg-defs.svg'
  41. }
  42. },
  43. {
  44. test: /\.(jpe?g|png|gif)\$/,
  45. use: [
  46. {
  47. loader: 'file-loader',
  48. options: {
  49. outputPath: 'images/',
  50. name: '[name].[ext]'
  51. }
  52. },
  53. 'img-loader'
  54. ]
  55. }
  56. ]
  57. },
  58. plugins: [
  59. new StyleLintPlugin(),
  60. new MiniCssExtractPlugin({
  61. filename: '[name].css'
  62. }),
  63. new BrowserSyncPlugin({
  64. files: '**/*.php',
  65. proxy: 'http://one.wordpress.test'
  66. })
  67. ],
  68. optimization: {
  69. minimizer: [new UglifyJsPlugin(), new OptimizeCssAssetsPlugin()]
  70. }
  71. };