13

現在、Grunt ファイルを Gulp ファイルに変換する実験を行っています。私の最初の試みは、JSHint と Mocha を単純に実行し、監視モードを持つ非常に単純なファイルを使用することでした。私の最初の結果はかなり…まあ…幻滅でした。

いくつかの問題に遭遇しました。それらを解決する方法があることを願っています。

  • Gulp はすべてのタスクを非同期で実行することに気付きました。タスクが完了するのを待ちたい場合、ドキュメントには、コールバック、プロミス、またはストリームを返すように指示されています。gulp-mochaしかし、これをandで行うにはどうすればよいgulp-jshintですか? これらのプラグインはこれをサポートしていますか?
  • 失敗gulp-jshintしてもビルドは失敗しませんでした。失敗した場合に処理を停止するように Gulp に指示するにはどうすればよいgulp-jshintですか?
  • watchGulp の入門ガイドで説明されているモードを使用すると、実行時にエラーが発生しましToo many open filesgulp。何が間違っている可能性がありますか?

(最初の 2 つの質問は一般的な質問であり、最後の質問はデフォルト ファイルに関するものであるため、ここでは意図的にソース コードを指定していないことに注意してください。)

これについて何か助けはありますか?

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 はスタイリッシュを使用して、少なくとも 1 つのファイルがヒンティングに失敗すると失敗します。

ここでは、これは myhinter タスクからストリームを返すことで実装されています。

詳細については、オーケストレーターのドキュメント ( https://github.com/robrich/orchestrator ) を参照してください。

私はモカを使用していませんが、後でそれを行う方法を見ていきます.

開いているファイルが多すぎることについて、OSX 上にありますか? もしそうなら、それが助けになるなら、多分これを見てください。

于 2014-01-14T17:20:09.533 に答える