Sha256: 2d0baacc00e64578172ee93dfa74b40e9b6372f6df03e1025978dfc9257f3eb5

Contents?: true

Size: 1.87 KB

Versions: 2

Compression:

Stored size: 1.87 KB

Contents

/* eslint global-require: 0 */
/* eslint import/no-dynamic-require: 0 */

const { merge } = require('webpack-merge')
const CompressionPlugin = require('compression-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const baseConfig = require('./base')
const { moduleExists } = require('../utils/helpers')

const getPlugins = () => {
  const plugins = []

  plugins.push(
    new CompressionPlugin({
      filename: '[path][base].gz[query]',
      algorithm: 'gzip',
      test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/
    })
  )

  if ('brotli' in process.versions) {
    plugins.push(
      new CompressionPlugin({
        filename: '[path][base].br[query]',
        algorithm: 'brotliCompress',
        test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/
      })
    )
  }

  return plugins
}

const tryCssMinimizer = () => {
  if (
    moduleExists('css-loader') &&
    moduleExists('css-minimizer-webpack-plugin')
  ) {
    const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
    return new CssMinimizerPlugin()
  }

  return null
}

const productionConfig = {
  devtool: 'source-map',
  stats: 'normal',
  bail: true,
  plugins: getPlugins(),
  optimization: {
    minimizer: [
      tryCssMinimizer(),
      new TerserPlugin({
        parallel: Number.parseInt(process.env.SHAKAPACKER_PARALLEL, 10) || true,
        terserOptions: {
          parse: {
            // Let terser parse ecma 8 code but always output
            // ES5 compliant code for older browsers
            ecma: 8
          },
          compress: {
            ecma: 5,
            warnings: false,
            comparisons: false
          },
          mangle: { safari10: true },
          output: {
            ecma: 5,
            comments: false,
            ascii_only: true
          }
        }
      })
    ].filter(Boolean)
  }
}

module.exports = merge(baseConfig, productionConfig)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shakapacker-7.0.0.rc.1 package/environments/production.js
shakapacker-7.0.0.rc.0 package/environments/production.js