with modules mac compile node.js gulp browserify

node.js - modules - Catching Browserify parse error(opción independiente)



npm gulp (5)

Estoy usando gulp + browserify para construir y empaquetar mi biblioteca javascript. Ahora hay una cosa que me molesta: estoy ejecutando un servidor simple con livereload para el desarrollo mediante Gulp. Esto funciona bien, pero cada vez que mi javascript contiene un error de sintaxis, browserify produce un error que hace que el servidor se detenga.

El código de navegador que utilizo (tenga en cuenta que he agregado un controlador de errores):

browserify("./src/main.js") .bundle({standalone: "SomeName", debug: false}).on(''error'', notify.onError({ message: "Error: <%= error.message %>", title: "Failed running browserify" }) );

Ahora viene la parte interesante: cuando elimino la configuración independiente (y mi js es sintácticamente incorrecta), el controlador de errores se dispara. Sin embargo, cuando utilizo esta configuración independiente, el controlador de errores no se dispara (lo que hace que el servidor se inicie al pararse un truco)

¿Alguien sabe cómo lidiar con este problema? Siempre podría validar manualmente mis archivos js de forma sencilla, pero me gustaría evitar esta solución


Aquí está el código que evita que la tarea Gulp se bloquee en caso de errores de agrupación. Es una versión ligeramente modificada del código que @tmtxt ha publicado. El problema que tuve con su versión fue que ''gulp.watch'' dejó de actualizarse después de que se produjo el primer error.

var browserify = require(''browserify''); var gulp = require(''gulp''); var source = require("vinyl-source-stream"); gulp.task(''browserify'', function () { browserify(paths.src.client.app) .bundle() .on(''error'', function(err){ console.log(err.message); }) .pipe(source(paths.dest.client.bundle)) .pipe(gulp.dest(paths.dest.client.scripts)); }); gulp.task(''watch-browserify'', function () { gulp.watch([paths.src.client.scripts], [''browserify'']) });


Bueno, como no pude encontrar ninguna solución que continúe viendo el archivo Gulp con browserify, resuelvo a esto

var exec = require(''child_process'').exec; var fs = require(''fs''); //watching changes from watchFile command fs.watchFile(''prim.js'',[ { interval: 100 }] , function (curr, prev) { //running cli command on change exec(''powershell.exe -Command "browserify prim.js -o main.js"'', function(err, stdout, stderr) { console.log(stdout); }) .stdin.end(); });

Solo agregue un archivo helper.js (asígnele el nombre que desee) en su carpeta actual, configure las rutas y ejecute ese archivo en el nodo desde CLI . Incluso no necesita instalar browserify localmente si lo tiene globalmente. Espero que esto ayude.


Como nadie publicó una respuesta (¡siéntase libre de corregirme si tiene una solución mejor!), Aquí está la solución que he agregado para que mi caso de uso funcione. He entendido que la versión Gulp planificada (v4) tendrá un mejor soporte para el manejo de errores, posiblemente resolviendo este problema. Sin embargo, por ahora uso el validador js.

var jsValidate = require(''gulp-jsvalidate''); var notify = require("gulp-notify"); gulp.task(''browserify'', function() { gulp.src("./src/*.js").pipe(jsValidate()).on(''error'', notify.onError({ message: "Error: <%= error.message %>", title: "Failed running browserify" })).on(''finish'', function(){ browserify("./src/main.js") .bundle({standalone: "SomeName", debug: true}).on(''error'', notify.onError({ message: "Error: <%= error.message %>", title: "Failed running browserify" })) .pipe(source(''output.js'')) }); });



El evento on(''error'') todavía se dispara. Sin embargo, el flujo de browserify es un poco diferente de otro flujo de Gulp. En la función de controlador de errores de browserify, debe llamar explícitamente a this.emit("end")

Un ejemplo de tarea trilla

var browserify = require(''browserify''); var gulp = require(''gulp''); var source = require("vinyl-source-stream"); var reactify = require(''reactify''); gulp.task(''browserify'', function(){ // create new bundle var b = browserify(); // add transform if you want b.transform(reactify); // add file to browserify b.add("./src/main.js"); // start bundling return b.bundle() .on(''error'', function(err){ // print the error (can replace with gulp-util) console.log(err.message); // end this stream this.emit(''end''); }) .pipe(source(''main.js'')) // pipe other plugin here if you want .pipe(gulp.dest(''./dist'')); });

el controlador de la función de error evita que Gulp se bloquee, this.emit("end") detiene la secuencia actual, no deja que se ejecute en los próximos canales. El controlador de eventos también puede detectar errores en el complemento de transformación.

Para obtener más información, puede leer aquí http://truongtx.me/2014/07/15/handle-errors-while-using-gulp-watch/