javascript - example - El paquete web optimize con el plugin UglifyJS causa un error de tiempo de ejecuciĆ³n
uglifyjs example (3)
Tengo una aplicación de Reacción isomorfa que se incluye a través de un paquete web.
Tengo 2 puntos de entrada correspondientes a 2 salidas de archivos en paquete: vendors.js
y vendors.js
Al ejecutar el webpack-dev-server o al compilar sin indicadores de optimización, todo funciona bien. Sin embargo, tan pronto como trato de usar el plugin Uglify , el resultado compilado contiene errores.
Yo he tratado:
webpack -p
webpack -optimize-minimize
o en la configuración:
new webpack.optimize.UglifyJsPlugin({sourceMap:false})
Pero todos dan como resultado el mismo error de tiempo de ejecución (variables no definidas).
¿Hay algo obvio que podría estar causando esto? ¿Uglify es demasiado celoso y elimina algo que no debería?
El problema fue causado por Uglify Mangler. Sin saber qué cambio de nombre de variable estaba causando el problema, la solución fue apagar por completo el proceso de fragmentación:
new webpack.optimize.UglifyJsPlugin({
sourceMap: false,
mangle: false
})
Esto se debe agregar 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
})
]
};
Lo solucioné usando lo siguiente (estoy usando Webpack 4.5):
var config = {
optimization: {
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
safari10: true,
mangle: {
safari10: true,
}
}
})
]
}
};
Desde https://github.com/mishoo/UglifyJS2/tree/harmony#mangle-options :
safari10 (valor predeterminado falso): pasar verdadero para solucionar el error del iterador de iteración 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 funcionó para mí cuando lo puse en plugins
.
Para aquellos que desactivaron mangle y todavía tienen el problema, verifique si compila 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 del js de alrededor de 50). %)