获取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真的不需要一个插件来让你访问像处理文件的名字一样基本的东西。