gulp - unused - jshint vs eslint
gulp-jshint: ¿Cómo fallar la compilación? (2)
Esto funciona para mi. Tengo la misma tarea trilla:
return gulp.src([''./src/**/*.js'', ''./docs_src/**/*.js''])
.pipe(jshint())
.pipe(jshint.reporter(''jshint-stylish''))
.pipe(jshint.reporter(''fail''))
y esto es lo que sucede:
$ gulp --version
[11:03:41] CLI version 3.9.0
[11:03:41] Local version 3.9.0
[14559:3392 - 0:2151] 11:03:41 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)
$ cat package.json
{
"name": "fsstatic2",
"version": "0.0.0",
"description": "fsstatic",
"author": "FreedomSponsors",
"devDependencies": {
"gulp": "~3.9.0",
"gulp-concat": "~2.5.2",
"gulp-linker": "~0.1.7",
"gulp-webserver": "~0.9.1",
"yargs": "~3.12.0",
"gulp-sass": "~2.0.1",
"gulp-ng-templates": "0.0.6",
"gulp-ngtemplate": "~0.2.5",
"gulp-htmlmin": "~1.1.3",
"merge-stream": "~0.1.7",
"gulp-copy": "0.0.2",
"gulp-jshint": "~1.11.0",
"jshint-stylish": "~2.0.1"
}
}
[14559:3392 - 0:2152] 11:04:01 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)
$ gulp jshintall
[11:04:11] Using gulpfile ~/work/solo/fsstatic2/gulpfile.js
[11:04:11] Starting ''jshintall''...
/home/tony/work/solo/fsstatic2/src/components/todo_example/todo.js
line 26 col 23 Missing semicolon.
⚠ 1 warning
[11:04:11] ''jshintall'' errored after 467 ms
[11:04:11] Error in plugin ''gulp-jshint''
Message:
JSHint failed for: /home/tony/work/solo/fsstatic2/src/components/todo_example/todo.js
[14559:3392 - 0:2153] 11:04:11 [tony@tony-lin:o +1] ~/work/solo/fsstatic2 (master)
$ echo $?
1
Quiero que mi compilación Gulp falle, si hay errores en JSHint.
De acuerdo con la documentación de gulp-jshint puedo usar el " informe fallido".
Sin embargo, lo siguiente no funciona:
gulp.task("lint", function() {
return gulp.src(JS_SOURCES)
.pipe(jshint())
.pipe(jshint.reporter("jshint-stylish"))
.pipe(jshint.reporter("fail"));
});
La tarea anterior siempre vuelve con el código de salida 0, incluso cuando hay errores en JSHint.
Estoy usando gulp 3.8.10 y gulp-jshint 1.9.0.
Hay discusiones en los temas github de gulp-jshint here y here ... pero de acuerdo con esas discusiones, deduzco que el código anterior debería funcionar con las últimas versiones de gulp y gulp-jshint. Sin embargo no ...
¿Alguien ha descubierto cómo fallar la compilación correctamente con gulp-jshint?
TLDR; Hasta que GulpJS tenga una buena solución en una versión estable, use la solución sugerida por Bahmutov en GitHub .
Él crea una solución, utilizando su propio filtro:
var map = require(''map-stream'');
var exitOnJshintError = map(function (file, cb) {
if (!file.jshint.success) {
console.error(''jshint failed'');
process.exit(1);
}
});
gulp.task(''lint'', function() {
gulp.src(''example.js'')
.pipe(jshint())
.pipe(jshint.reporter(''jshint-stylish''))
.pipe(exitOnJshintError);
});
Respuesta larga
Esta pregunta se ha publicado como un problema en GitHub: ¿Cómo fallar la creación de tragos? # 6 . Preste especial atención al comentario de Bahmutov .
La solución (hack) que propone es agregar su propio filtro y hacer un process.exit(1);
cuando hay errores de insinuación, que se ve así:
var map = require(''map-stream'');
var exitOnJshintError = map(function (file, cb) {
if (!file.jshint.success) {
console.error(''jshint failed'');
process.exit(1);
}
});
gulp.task(''lint'', function() {
gulp.src(''example.js'')
.pipe(jshint())
.pipe(jshint.reporter(''jshint-stylish''))
.pipe(exitOnJshintError);
});
Este problema se enlaza con otro problema. El complemento no falla la compilación # 10 . Básicamente, lo que dicen aquí es que Gulp debería hacerse cargo de la falla de construcción. Esto da lugar a otro problema que se ha informado en GulpJS: el control de las compilaciones fallidas # 113 . Lo que en su turno ha sido mover a "terminar y luego fallar" # 20 . El último ha sido arreglado y se puede seguir el lanzamiento de Gulp JS: cambiando este # 347 .
Entonces, tendremos que esperar a que sea lanzado ...
Mientras tanto, podemos usar la solución alternativa mencionada en la parte superior de mi publicación en el TLDR;
Lo he implementado mi gulpfile.js
en scripts-app
tareas .