获取gulp.src()中的当前文件名

在我的gulp.js文件中,我将来自examples文件夹的所有HTML文件放入build文件夹中。

创造吞咽任务并不困难:

 var gulp = require('gulp'); gulp.task('examples', function() { return gulp.src('./examples/*.html') .pipe(gulp.dest('./build')); }); 

但我不知道如何检索在任务中find(和处理)的文件名,或者我无法find正确的插件。

我不知道你想如何使用文件名,但其中的一个应该有所帮助:

  • 如果你只是想看到名字,你可以使用像gulp-debug这样的东西,它列出了乙烯文件的细节。 插入这个你想要的列表,如下所示:

     var gulp = require('gulp'), debug = require('gulp-debug'); gulp.task('examples', function() { return gulp.src('./examples/*.html') .pipe(debug()) .pipe(gulp.dest('./build')); }); 
  • 另一个选项是gulp-filelog ,我没有用过,但是听起来很相似(可能有点干净)。

  • 另一个选项是gulp-filesize ,它输出文件和它的大小。

  • 如果你想要更多的控制,你可以使用诸如gulp-tap类的东西,它可以让你提供你自己的function,并查看pipe道中的文件。

我发现这个插件正在做我所期望的: 吞噬

简单的使用示例:search扩展名为.jsx的项目中的所有文件

 gulp.task('reactify', function(){ gulp.src(['../**/*.jsx']) .pipe(using({})); .... }); 

输出:

 [gulp] Using gulpfile /app/build/gulpfile.js [gulp] Starting 'reactify'... [gulp] Finished 'reactify' after 2.92 ms [gulp] Using file /app/staging/web/content/view/logon.jsx [gulp] Using file /app/staging/web/content/view/components/rauth.jsx 

您可以使用gulp-filenames模块来获取path数组。 您甚至可以按名称空间对它们进行分组:

 var filenames = require("gulp-filenames"); gulp.src("./src/*.coffee") .pipe(filenames("coffeescript")) .pipe(gulp.dest("./dist")); gulp.src("./src/*.js") .pipe(filenames("javascript")) .pipe(gulp.dest("./dist")); filenames.get("coffeescript") // ["a.coffee","b.coffee"] // Do Something With it 

这是另一个简单的方法。

 var es, log, logFile; es = require('event-stream'); log = require('gulp-util').log; logFile = function(es) { return es.map(function(file, cb) { log(file.path); return cb(); }); }; gulp.task("do", function() { return gulp.src('./examples/*.html') .pipe(logFile(es)) .pipe(gulp.dest('./build')); }); 

对于我的情况吞咽,忽略是完美的。 作为选项,你可以在那里传递一个函数:

 function condition(file) { // do whatever with file.path // return boolean true if needed to exclude file } 

这个任务看起来像这样:

 var gulpIgnore = require('gulp-ignore'); gulp.task('task', function() { gulp.src('./**/*.js') .pipe(gulpIgnore.exclude(condition)) .pipe(gulp.dest('./dist/')); }); 

如果您想在Typescript中使用@OverZealous'answer( https://stackoverflow.com/a/21806974/1019307 ),则需要import而不是require

 import * as debug from 'gulp-debug'; ... return gulp.src('./examples/*.html') .pipe(debug({title: 'example src:'})) .pipe(gulp.dest('./build')); 

(我也添加了一个title )。

如果你想使用文件名在一个pipe道内分叉, gulp-if可能是一个不错的select。

 gulp .task('foo', () => [...]) .pipe(gulpif(file => { return file.path.indexOf('myName')? false : true; }, doSomething(), doSomethingElse())) .pipe(concat('output.file')); 

我的用例是丑化供应商的JavaScript,其中一些包含UglifyJS无法处理(并已被缩小)的ES6语法。

顺便说一句:Gulp真的不需要一个插件来让你访问像处理文件的名字一样基本的东西。