我目前正在尝试将我的Grunt文件转换为Gulp文件。我的第一次尝试是使用一个非常简单的文件,它只运行JSHint和Mocha,并具有监视模式。我的第一个结果是......好吧......幻想破灭。
我遇到了几个问题,我希望有办法解决它们:
gulp-mocha
和gulp-jshint
执行此操作?这些插件是否支持此功能?gulp-jshint
没有使构建失败。如果gulp-jshint
失败,我怎么告诉Gulp停止继续?watch
模式,在运行Too many open files
时出现gulp
错误。任何可能出错的想法?(请注意,我故意没有在此指定源代码,因为前两个问题是一般问题,最后一个问题是默认文件。)
对此有何帮助?
答案 0 :(得分: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);
});
答案 1 :(得分: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,使用时尚的记者,如果至少有一个文件没有提示,则会失败。
这里,这是通过从myhinter任务返回流来实现的。
您可以在orchestrator文档中查看更多相关信息:https://github.com/robrich/orchestrator
我不使用mocha,但稍后会看一下如何操作。
关于打开的文件太多,是否在OSX上?如果是,请查看this here是否有帮助。
答案 2 :(得分:0)
我解决了“太多打开的文件..”在我的.bash_profile中添加以下行:
ulimit -n 10480