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?
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
})
]
};
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%)
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
.
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