0

watchifyファイルをパイプできるようにするためのgulpプラグインを作成しようとしています。問題は、私のタスクが実際に「終了」しないことです。タスクはそこに座って、一連のファイルを監視し、必要に応じて再構築するためです。

では、このプラグインを「介して」コードを送信するにはどうすればよいでしょうか?

現在、プラグインを呼び出す私のタスクは次のように単純化されています。

gulp.src( '/path/to/js/*.js' )
    .pipe( watchifyPlugin() )
    .pipe( cfg.gulp.dest( '/path/to/build' ) )

watchifyPluginは:

module.exports = function( opts ){
    return through.obj( function( file, enc, cb ){
        // watchify file
        self.push( data ); // whenever any .js files are updated

        // never call cb()
    }
}

.jsこれで、グロブが最初に見つけたファイルで問題なく動作します。ただし、他のファイルが実際にプラグインに到達することはありませんcb()

では、これを行うにはどうすればよいですか?を呼び出さずにストリームへの書き込みを続ける方法はありますか?これにより、ストリームcb()が閉じられますが、前のパイプを続行できますか?

言い換えると:

  • index.js
    • watchify()
    • 何度dest()も呼び出しても問題なくパイプしますself.push()
    • cb()呼んだことない
  • index2.js
    • watchify()が呼び出されるまで決して呼び出されませんcb()が、これによりパイプindex.jsが「閉じられます」index.js
4

2 に答える 2

0

これは非常に悪い考えです。gulp のすべてがプラグインである必要はありません。特に、browerify および watchify プラグインは一貫して禁止されています。( https://github.com/gulpjs/plugins/blob/master/src/blackList.jsonを参照してください。) watchify を実行したい場合は、直接 watchify を使用してください。https://github.com/gulpjs/gulp/blob/master/docs/recipes/fast-browserify-builds-with-watchify.mdから:

var gulp = require('gulp');
var source = require('vinyl-source-stream');
var watchify = require('watchify');

gulp.task('watch', function() {
  var bundler = watchify('./src/index.js');

  // Optionally, you can apply transforms
  // and other configuration options on the
  // bundler just as you would with browserify
  bundler.transform('brfs');

  bundler.on('update', rebundle);

  function rebundle () {
    return bundler.bundle()
      .pipe(source('bundle.js'))
      .pipe(gulp.dest('./dist'))
  }

  return rebundle();
});
于 2014-06-18T09:48:42.860 に答える