gulp插件开发中this.push主要作用是什么?

求问:

在开发一个gulp插件时发现是否调用this.push(file)对gulp.src取得的文件结果有影响

那么this.push(file)的主要作用是什么?

为什么会影响gulp.src的结果?

我直接

gulp.src('./output/**/*.js')
    pipe(myPlugin());

myPlugin里

module.exports = function (options) {

    return through.obj(function (file, enc, cb) {
    
        console.log(file.path);
        
        // 这货是否存在影响了gulp.src()的结果,前面log的文件数量不一致
        this.push(file);
        
        cb();
    };
    
};
阅读 4.1k
3 个回答

文档是这么说的

图片描述

我们现在假设你的./output/**/*.js匹配到了两个文件,分别是:./output/a.js./output/b.js

当你执行如下代码时:

gulp.src('./output/**/*.js')
    .pipe(myPlugin())
    .pipe(gulp.dest('dist'));

./output/a.js./output/b.js都会被拷贝到dist目录下。

那么如果你的myPlugin里没有了this.push(file),你再试试,将不会有任何内容传递给gulp.dest('dist'),也就是说,没有任何文件被拷贝到dist目录了。

为了把file传给下一个pipe

@leftstick

clipboard.png

这是task测试用例

clipboard.png

这是最简单的一个插件,就仅仅是打印了文件而已,而是否注释掉this.push(file)就影响了当前插件打印出来的文件的数量

保留this.push(file)打印的文件数量差别非常大

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题