Sha256: 6f2302d52f516220f85912437f6b3ffda36eff4de72a5d71368dda326e458dc2

Contents?: true

Size: 1.87 KB

Versions: 31

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.WEBPACKER_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

31 entries across 31 versions & 2 rubygems

Version Path
shakapacker-6.6.0 package/environments/production.js
shakapacker-6.5.6 package/environments/production.js
shakapacker-6.5.5 package/environments/production.js
shakapacker-6.5.4 package/environments/production.js
shakapacker-6.5.3 package/environments/production.js
shakapacker-6.5.2 package/environments/production.js
shakapacker-6.5.1 package/environments/production.js
shakapacker-6.5.0 package/environments/production.js
shakapacker-6.4.1 package/environments/production.js
shakapacker-6.4.0 package/environments/production.js
shakapacker-6.3.0 package/environments/production.js
shakapacker-6.3.0.pre.rc.1 package/environments/production.js
shakapacker-6.2.1 package/environments/production.js
shakapacker-6.2.0 package/environments/production.js
shakapacker-6.1.1 package/environments/production.js
shakapacker-6.1.0 package/environments/production.js
shakapacker-6.1.0.beta.0 package/environments/production.js
shakapacker-6.0.2 package/environments/production.js
shakapacker-6.0.1 package/environments/production.js
shakapacker-6.0.0 package/environments/production.js