2014-05-21 35 views
1

我正在尝试在gulp插件中包装RequireJS Optimizer。有havebeenotherattempts提供gulp这个功能,但没有一个满足我的需求。gulp插件可以接收一个文件并返回多个文件吗?

一种常见的方法,以插件的开发是取,对它们进行处理的文件,然后把他们出去;但是这种方法与RequireJS优化器的工作方式并不完全兼容。

虽然它不符合gulp插件guidelines,但我正在研究采用optimizer build configuration的其他方法,处理它并分发生成的文件。

// Read in the r.js configuration 
gulp.src('./build.js') 
    // Optimize the files according to the config 
    .pipe(optimize()) 
    // Return the resulting files for additional processing 
    .pipe(size()); 

gulp插件可以接受一个文件并返回多个文件吗?如果是这样,怎么样?

回答

0

我结束了使用vinyl-fs沿着优化过程的输出传递。

var requirejs = require('requirejs'), 
    through  = require('through2'), 
    vfs   = require('vinyl-fs'); 

return through.obj(function(file, encoding, done){ 

// Parse config from file 

requirejs.optimize(config, 

    // Success callback 
    function(buildResponse){ 
     vfs.src(config.dir + '/**/*.js') 
      .on('data', this.push.bind(this)) 
      .on('error', this.emit.bind(this, 'error')) 
      .on('end', done); 
    }.bind(this), 

    // Error callback 
    function(buildError){ 
     // Handle error 
    }); 

用法最终看起来像...

// Read in build configuration 
gulp.src('build.js') 
    // Run files from the config through the optimizer 
    .pipe(optimize(settings)) 
    // Measure the size of the optimized files 
    .pipe(size()); 
+0

我正在努力解决同样的问题。你碰巧有更具体的例子吗?就像这是如何通过管道传输到fe。 gulp.dest()处理程序?此外,“回调”是指什么? – crappish

+0

我添加了一些更多的细节。鉴于插件的作用,我不需要使用'gulp.dest()',但我不明白为什么你不能。 –

1
  1. 是,简单地发出多个文件。输出只需要一个或多个Vinyl文件。
  2. 插件仅接收管道(发射)给他们的内容。这就是使用异步管道的重点。

看看the plugin docs了解它们是如何工作的。

+0

感谢。我会仔细看看的。 –

相关问题