#gulp
#глоток
Вопрос:
Вот соответствующие части моего gulpfile.js
:
var paths = {
sass: ['./www/**/*.scss'],
scripts: ['./www/**/*.js', '!./www/lib/**/*.js']
};
gulp.task('jshint', function(done) {
console.log('Running jshint');
gulp.src(paths.scripts)
.pipe(jshint())
.pipe(jshint.reporter('default'))
.on('end', done);
});
gulp.task('scripts', function(done) {
console.log('Running scripts');
gulp.src(paths.scripts)
.pipe(concat('chessmate.js'))
.pipe(gulp.dest('./www/'))
.on('end', done);
});
gulp.task('sass', function(done) {
gulp.src('./www/ionic.app.scss')
.pipe(sass({
errLogToConsole: true,
includePaths: []
}))
.pipe(concat('chessmate.css'))
.pipe(gulp.dest('./www/'))
.on('end', done);
});
gulp.task('watch', function() {
gulp.watch(paths.sass, ['sass']);
gulp.watch(paths.scripts, ['jshint', 'scripts']);
});
gulp.task('default', ['jshint', 'scripts', 'sass', 'watch']);
Когда я запускаю gulp
, запускаются оба jshint
и scripts
:
[gulp] Using gulpfile /Users/mishamoroshko/ChessMate/gulpfile.js
[gulp] Starting 'jshint'...
Running jshint
[gulp] Starting 'scripts'...
Running scripts
[gulp] Starting 'sass'...
[gulp] Starting 'watch'...
[gulp] Finished 'watch' after 93 ms
Но, если затем я обновляю app.js
, запускается только scripts
:
[gulp] Starting 'scripts'...
Running scripts
[gulp] Finished 'scripts' after 396 ms
Почему jshint
не запускается?
Комментарии:
1. Возможно, если ваш первый jshint завершается с ошибкой подсказки (из-за плохого js), он не выдает ‘end’. Поскольку вы сигнализируете «сделано» только при завершении, gulp считает, что первая задача jshint все еще выполняется при последовательных изменениях, и будет ли nit запускать ее снова?
Ответ №1:
По-видимому, переходя от этого стиля:
gulp.task('taskname', function(done) {
[do stuff].on('end', done);
});
к этому одному:
gulp.task('taskname', function() {
return [do stuff];
});
решена проблема.
Ответ №2:
Мне кажется, что он должен запускаться автоматически, но поскольку это не так, вы могли бы попробовать добавить jshint
задачу в качестве зависимости для scripts
задачи следующим образом:
gulp.task('scripts', ['jshint'], function(done) {
console.log('Running scripts');
gulp.src(paths.scripts)
.pipe(concat('chessmate.js'))
.pipe(gulp.dest('./www/'))
.on('end', done);
});
Надеюсь, это поможет. Если это работает для вас, вы также должны иметь возможность удалить jshint
из своей watch
задачи:
gulp.task('watch', function() {
gulp.watch(paths.sass, ['sass']);
gulp.watch(paths.scripts, [ /*'jshint',*/ 'scripts']);
});