uglify grunt example contrib compress clean javascript uglifyjs grunt-contrib-uglify

javascript - grunt - uglify minify



¿Grunt-contrib-uglify no analiza las palabras "let"? (2)

Estoy recibiendo un error,

''Token inesperado: nombre (bazz)''

cuando mi tarea grunt se está ejecutando uglify. Lo único que noté en esa línea fue que estaba usando la palabra clave ''let'' en lugar de ''var'', así que no estaba seguro de por qué se estaba lanzando ese error.

Tengo una sentencia if else con let varName en cada uno, es decir:

function foo (bar) { if (condition) { let bazz = fn(); //doSomething with bazz _.assign(bar, bazz); } else { let bazz = fn2(); //doSomething different with bazz _.assign(bar, bazz); } }

Podría alterarlo teniendo una var bazz = {}; antes de la cláusula if else, pero quería evitar eso porque tendría que asignar bazz a fn () y fn2 () independientemente.

Quería saber si alguien más se ha encontrado con esto y qué hicieron para solucionarlo. ¡Gracias por adelantado!


Después de investigar un poco más sobre este tema, descubrí que grunt-contrib-uglify y gulp-uglify tiene a UglifyJS como una dependencia y aún no es compatible con ES6 "Harmony". Siga https://github.com/mishoo/UglifyJS2/issues/448 para obtener actualizaciones.

También puede usar herramientas como grunt-babel para compilar su código ES6 a ES5.


Encontré lo siguiente en la página oficial de gulp-uglify npm.

Tenga en cuenta la recomendación:

Para ayudar a manejar adecuadamente las condiciones de error con flujos de Nodo, este proyecto recomienda el uso de la pump . Para obtener más información, consulte ¿Por qué usar la bomba? .

Mi implementación del ejemplo en la página anterior es:

gulpfile.js

var gulp = require(''gulp''); var pump = require(''pump''); // the npm page states: // can be a git checkout or another module // (such as `uglify-js-harmony` for ES6 support) var uglifyjs = require(''uglify-js-harmony''); var minifier = require(''gulp-uglify/minifier''); var concat = require(''gulp-concat''); gulp.task(''compress'', function (cb) { // the ''options'' argument is included in the example, // but i don''t know what it does or how it can be removed var options = { preserveComments: ''license'' }; pump([ gulp.src(''my_scripts/*.js''), // gets all js scripts in this folder minifier(options, uglifyjs), concat(''my_bundled_script.js''), // concatenates all scripts into this file gulp.dest(''dist'') // puts the file into this folder ],cb ); });

paquete.json

{ "devDependencies": { "gulp": "latest", "pump": "latest", "gulp-concat": "latest", "gulp-uglify": "latest", "uglify-js-harmony": "latest" }, "dependencies": {} }

Resultados

Sin usar uglify-js-harmony :

  • pump fue útil para localizar de dónde provino el error (cuando se usa gulp-uglify )
  • un archivo que tenía una sentencia let causó errores

Cuando se usa uglify-js-harmony , los errores no ocurrieron.

Otras Consideraciones:

La página anterior actualmente muestra:

// can be a git checkout or another module // (such as `uglify-js-harmony` for ES6 support) var uglifyjs = require(''uglify-js'');

Pero al instalar uglify-js-harmony recibí el mensaje de advertencia:

npm WARN en desuso [email protected]: desaprobado en favor de uglify-es

Sin embargo, cuando intenté usar uglify-es lugar de uglify-js-harmony , recibí un mensaje de error, similar al documentado aquí:

https://github.com/terinjokes/gulp-uglify/issues/287

Intenté seguir el tema desde allí, pero me perdí y no pude encontrar una solución definitiva de cómo implementar uglify-es .