HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/heifetz/heifetz-app/webpack.config.js
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetWebpackPlugin = require('optimize-css-assets-webpack-plugin')
const TerserWebpackPlugin = require('terser-webpack-plugin')
const SVGSpritemapPlugin = require('svg-spritemap-webpack-plugin')
// const CopyPlugin = require('copy-webpack-plugin');

const isDev = process.env.NODE_ENV === 'development'
const isProd = !isDev

const optimization = () => {
  const config = {}

  if (isProd) {
    config.minimizer = [
      new OptimizeCssAssetWebpackPlugin(),
      new TerserWebpackPlugin()
    ]
  }

  return config
}

const cssLoaders = extra => {
  const loaders = [
    {
      loader: MiniCssExtractPlugin.loader,
      options: {
        publicPath: '../'
      }
    },
    'css-loader'
  ];

  if (extra) {
    loaders.push(extra)
  }

  return loaders;
}

const fileLoaderOptions = outputPath => {
  return {
    name: '[name].[ext]',
    outputPath: outputPath
  }
}

const plugins = () => {
  return [
    new MiniCssExtractPlugin({filename: 'css/main.css'}),
    new SVGSpritemapPlugin('./src/img/icons/*.svg', {output: {filename: 'icons/sprite.svg'}}),
    // new CopyPlugin({patterns: [{from: './src/images', to: 'images'}]})
  ]
}

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'js/system/main.js',
    path: path.resolve(__dirname, 'public/assets')
  },
  optimization: optimization(),
  devtool: isDev ? 'source-map' : '',
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
            plugins: ['@babel/plugin-proposal-class-properties']
          }
        }
      },
      {
        test: /\.css$/,
        use: cssLoaders()
      },
      {
        test: /\.less$/,
        use: cssLoaders('less-loader')
      },
      {
        test: /\.(png|jpg|gif)$/,
        loader: 'file-loader',
        options: fileLoaderOptions('img')
      },
      {
        test: /\.(ttf|woff|woff2|eot)$/,
        loader: 'file-loader',
        options: fileLoaderOptions('fonts')
      },
      {
        test: /\.svg$/,
        loader: 'file-loader',
        exclude: '/img/icons/',
        options: fileLoaderOptions((url, resourcePath, context) => {
          if (/(glyphicons-halflings-regular|fontawesome-webfont|icomoon|icomoon2)/.test(resourcePath)) {
            return `fonts/${url}`;
          }

          return `img/${url}`;
        })
      }
    ]
  },
  plugins: plugins()
}