Подтвердить что ты не робот

От Grunt до Gulp

В настоящее время я экспериментирую с преобразованием файлов Grunt в файлы Gulp. Моя первая попытка была с довольно простым файлом, который просто запускает JSHint и Mocha и имеет режим просмотра. Мой первый результат был довольно... ну... разочарованием.

Я столкнулся с несколькими проблемами, и я надеюсь, что есть способ их решить:

  • Я понял, что Gulp выполняет все задачи асинхронно. Если я хочу дождаться завершения задачи, документация подскажет мне использовать обратный вызов, обещание или вернуть поток. Но как это сделать с помощью gulp-mocha и gulp-jshint? Поддерживают ли эти плагины это?
  • Ошибка gulp-jshint не сработала. Как сообщить Gulp прекратить выполнение, если gulp-jshint не удалось?
  • Использование режима watch, как описано в Gulp, руководство по началу работы привело к ошибке Too many open files при запуске gulp. Любая идея о том, что может быть неправильным?

(Обратите внимание, что я намеренно не указал здесь исходный код, так как первые два вопроса - это общие вопросы, а последний - файл по умолчанию.)

Любая помощь по этому поводу?

4b9b3361

Ответ 1

Что касается зависимостей задач, самым простым решением является возврат потока gulp из задачи и зависит от этой задачи.

В приведенном ниже коде, если задача "сервер" не возвращает поток, он будет выполняться асинхронно, в результате чего задача "обслуживать" пытается запустить сервер с использованием несуществующего файла.

gulp.task('server', function () {
  return gulp.src('server/**/*.coffee')
      .pipe(coffeescript())
      .pipe(gulp.dest('./dist/'));
});

var expressServer;

gulp.task('serve', ['server'], function () {
  var apiServer = require('./dist/server');
  expressServer = apiServer(function (server) {
    server.use(livereload({
      port: livereloadport
    }));

  });

  expressServer.listen(serverport);

  //Set up your livereload server
  lrserver.listen(livereloadport);
});

Ответ 2

Для части "stop and fail":

Вот пример с jshint:

var reporter = require('jshint-stylish');
var jshintRc = readJSON('.jshintrc');

// Implement asynchronous support returning the stream
gulp.task('myhinter', function() {
  // All js in src
  return gulp.src('./src/*.js')
    // options from file
    .pipe(jshint(jshintRc))
    // like stylish reporter
    .pipe(jshint.reporter(reporter))
    // Our turn!
    .pipe(map(function (file, cb) {
      // Notify the callback "true" if it failed on the file
      cb(!file.jshint.success, file);
    }));
})

// Now, define thattask to depend on myhinter
gulp.task('thattask', ['myhinter'], function(e) {
  console.warn('thattask is executing');
});

thattask зависит от успеха задачи myhinter.

В свою очередь myhinter делает jshint на файлах, репортер использует стильный и терпит неудачу, если хотя бы один файл провалился.

Здесь это реализовано путем возврата потока из задачи myhinter.

Об этом можно узнать в документации оркестра: https://github.com/robrich/orchestrator

Я не использую mocha, но посмотрю позже, чтобы посмотреть, как это сделать.

О слишком большом открывшемся файле находятся на OSX? Если это так, возможно, посмотрите здесь, если это поможет.

Ответ 3

Я решил "Слишком много открытых файлов.." добавив в мой .bash_profile следующую строку:

ulimit -n 10480