Tengo una aplicación React isomorfa que se incluye a través de un paquete web.
Tengo 2 puntos de entrada correspondientes a 2 salidas de archivos agrupados: vendors.js y app.js
Cuando se ejecuta el servidor webpack-dev-server o cuando se compila sin indicadores de optimización, todo funciona bien. Sin embargo, tan pronto como trato de usar el complemento Uglify , la salida compilada contiene errores.
Yo he tratado:
webpack -p webpack -optimize-minimizeo en la configuración:
new webpack.optimize.UglifyJsPlugin({sourceMap:false})Pero todos dan como resultado el mismo error de tiempo de ejecución (variables indefinidas).
¿Hay algo obvio que pueda estar causando esto? ¿Uglify está siendo demasiado entusiasta y está eliminando algo que no debería?
El problema estaba siendo causado por el triturador de Uglify. Sin saber qué cambio de nombre de variable estaba causando el problema, la solución fue desactivar por completo la manipulación:
new webpack.optimize.UglifyJsPlugin({ sourceMap: false, mangle: false })Esto debe agregarse como un complemento de Webpack a su archivo de configuración, por ejemplo:
var config = { //... various config settings plugins: [ new webpack.optimize.UglifyJsPlugin({ sourceMap: false, mangle: false }) ] };Para aquellos que desactivaron mangle y aún tienen el problema, verifiquen si construyen con el parámetro -p. Parece que -p también altera la salida, y en mi caso, tuve que cambiar UflifyJsPlugin mangle a falso y compilar sin el indicador -p para que funcione (a costa de un aumento del peso de js de alrededor de 50 %)
Lo solucioné usando lo siguiente (estoy usando Webpack 4.5):
var config = { optimization: { minimizer: [ new UglifyJsPlugin({ uglifyOptions: { safari10: true, mangle: { safari10: true, } } }) ] } };Desdehttps://github.com/mishoo/UglifyJS2/tree/harmony#mangle-options :
safari10 (falso predeterminado) -- Pase verdadero para solucionar el error del iterador de bucle de 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 me funcionó cuando lo puse en plugins .