Webpack optimizar con UglifyJS plugin causa error de tiempo de ejecución


Tengo una aplicación isomorfa React que se incluye a través de webpack.

Tengo 2 puntos de entrada correspondientes a 2 salidas de archivo agrupadas: vendors.js y app.js.

Cuando se ejecuta el webpack-dev-server o cuando se compila sin ningún indicador de optimización, todo funciona bien. Sin embargo, tan pronto como intento usar el plugin Uglify, la salida compilada contiene errores.

He intentado:

webpack -p
webpack -optimize-minimize

O en el config:

new webpack.optimize.UglifyJsPlugin({sourceMap:false})

Pero todos resultan en el mismo error de tiempo de ejecución (variables indefinidas).

¿Hay algo obvio que pueda estar causando esto? ¿Es Uglify ser demasiado celoso y eliminar algo que no debería?

Author: duncanhall, 2015-05-19

3 answers

El problema estaba siendo causado por el mangler Uglify. Sin saber qué variable de cambio de nombre estaba causando el problema, la solución era desactivar la mutilación por completo:

new webpack.optimize.UglifyJsPlugin({
  sourceMap: false,
  mangle: false
})

Esto debe agregarse como un complemento Webpack a su archivo de configuración, por ejemplo:

var config = {

  //... various config settings

  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: false,
      mangle: false
    })
  ]
};
 68
Author: duncanhall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-14 08:45:36

Para aquellos que desactivaron mangle y aún tienen el problema, verifique si compila con el parámetro-p. Aparece-p también mangle la salida, y en mi caso, tuve que cambiar UflifyJsPlugin mangle a false y construir sin la bandera-p para que funcione (a costa de un aumento del peso de la js de alrededor del 50%)

 1
Author: mbegoc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 15:26:32

Arreglé esto usando lo siguiente (estoy usando Webpack 4.5):

var config = {
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          safari10: true,
          mangle: {
            safari10: true,
          }
        }
      })
    ]
  }
};

De https://github.com/mishoo/UglifyJS2/tree/harmony#mangle-options:

Safari10 (default false) Pass Pase true para evitar el error del iterador de bucle Safari 10 "No se puede declarar una variable let dos veces". Ver también: la opción de salida safari10.

También tenga en cuenta que esto va en optimization.minimizer. No funcionó para mí cuando lo puse en plugins.

 0
Author: TurplePurtle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-17 06:51:32