gulp插件可以接收一个文件并返回多个文件吗?

Can a gulp plugin take in one file and return many files?

本文关键字:文件 插件 返回 一个 gulp      更新时间:2023-09-26

我试图将RequireJS优化器包装在gulp插件中。在gulp中已经有其他的尝试来提供这个功能,但是没有一个能满足我的需求。

插件开发的一个常见方法是接收文件,处理它们,然后分发它们;然而,这种方法与RequireJS优化器的工作方式并不真正兼容。

虽然它不符合gulp插件指南,但我正在研究一种不同的方法,即接受优化器构建配置,处理它,并分发结果文件。

// 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插件可以接收一个文件并返回多个文件吗?如果有,怎么做?

  1. 是的,只是发出多个文件。输出只需要是一个或多个Vinyl文件。
  2. 插件只接收管道(发射)给他们的东西。这就是使用异步管道的全部意义。

查看插件文档,了解它们是如何工作的

我最终使用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() );