繁体   English   中英

从Grunt到Gulp

[英]From Grunt to Gulp

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

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

  • 我意识到Gulp异步运行所有任务。 如果我想等待任务完成,文档告诉我使用回调,承诺或返回流。 但是如何使用gulp-jshint gulp-mochagulp-jshint执行此gulp-jshint 这些插件是否支持此功能?
  • 失败gulp-jshint并没有使构建失败。 如果gulp-jshint失败,我怎么告诉Gulp停止继续?
  • 使用Gulp入门指南中描述的watch模式导致运行gulp时出现Too many open files错误。 什么可能是错的?

(请注意,我有意在此处未指定源代码,因为前两个问题是一般问题,最后一个问题是默认文件。)

对此有何帮助?

关于任务依赖性,最简单的解决方案是从任务返回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);
});

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

这是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任务返回流来实现的。

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

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

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

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

ulimit -n 10480

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM