Получить имя текущего файла в gulp.src()
В моем gulp.js файле я передаю все HTML файлы из папки examples
в папку build
.
Чтобы создать задачу gulp не сложно:
var gulp = require('gulp');
gulp.task('examples', function() {
return gulp.src('./examples/*.html')
.pipe(gulp.dest('./build'));
});
Но я не могу понять, как получить имена файлов, найденные (и обработанные) в задаче, или я не могу найти правильный плагин.
Ответы
Ответ 1
Я не уверен, как вы хотите использовать имена файлов, но один из них должен помочь:
-
Если вы просто хотите увидеть имена, вы можете использовать что-то вроде 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
, которое позволяет вам предоставить свою собственную функцию и посмотреть файлы в трубе.
Ответ 2
Я нашел, что этот плагин выполняет то, что я ожидал: gulp-using
Простой пример использования: поиск всех файлов в проекте с расширением .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
Ответ 3
Вот еще один простой способ.
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'));
});
Ответ 4
Вы можете использовать модуль gulp-filenames, чтобы получить массив путей.
Вы даже можете группировать их по пространствам имен:
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
Ответ 5
Для моего случая gulp-ignore было идеально.
В качестве опции вы можете передать там функцию:
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/'));
});
Ответ 6
Если вы хотите использовать ответ @OverZealous (fooobar.com/questions/52521/...) в Typescript, вам нужно import
вместо require
:
import * as debug from 'gulp-debug';
...
return gulp.src('./examples/*.html')
.pipe(debug({title: 'example src:'}))
.pipe(gulp.dest('./build'));
(Я также добавил title
).
Ответ 7
Если вы хотите использовать имя файла для fork внутри канала, gulp-if может быть хорошим выбором.
gulp
.task('foo', () => [...])
.pipe(gulpif(file => {
return file.path.indexOf('myName')? false : true;
}, doSomething(), doSomethingElse()))
.pipe(concat('output.file'));
My usecase - это угасающий JavaScript-разработчик, некоторые из которых содержат синтаксис ES6, с которым UglifyJS не справляется (и это уже было уменьшено).
Кстати: Gulp действительно не нужен плагин, чтобы дать вам доступ к чему-то базовому, как имя обработанного файла.