13

我目前正在尝试将我的 Grunt 文件转换为 Gulp 文件。我的第一次尝试是使用一个非常简单的文件,它只运行 JSHint 和 Mocha,并具有监视模式。我的第一个结果是相当……嗯……幻灭。

遇到了几个问题,希望有办法解决:

  • 我意识到 Gulp 异步运行所有任务。如果我想等待任务完成,文档会告诉我使用回调、承诺或返回流。但是我该如何使用gulp-mochaandgulp-jshint呢?这些插件支持吗?
  • 失败gulp-jshint并没有使构建失败。gulp-jshint如果失败,我如何告诉 Gulp 停止继续?
  • 使用watchGulp 入门指南中描述的模式会导致Too many open files运行时出错gulp。知道可能出了什么问题吗?

(请注意,这里我特意没有说明源代码,因为前两个问题是一般问题,最后一个是默认文件。)

对此有什么帮助吗?

4

3 回答 3

10

关于任务依赖,最简单的解决方案是从任务中返回 gulp 流,并依赖于该任务。

在下面的代码中,如果“server”任务不返回流,它将异步运行,导致“serve”任务尝试使用不存在的文件运行服务器。

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);
});
于 2014-02-16T22:14:26.600 回答
4

对于“停止和失败”部分:

这是一个使用 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,reporter 使用时尚,如果至少一个文件提示失败,则失败。

在这里,这是通过从 myhinter 任务返回流来实现的。

您可以在 Orchestrator 文档中看到更多相关信息:https ://github.com/robrich/orchestrator

我不使用摩卡,但稍后会看看如何做到这一点。

关于打开的文件太多,是在 OSX 上吗?如果是这样,如果有帮助,也许可以在这里看到。

于 2014-01-14T17:20:09.533 回答
0

我解决了“打开的文件太多..”在我的 .bash_profile 中添加了以下行:

ulimit -n 10480
于 2014-01-28T22:27:31.330 回答