Получить текущее имя файла в gulp.src()
В моем файле gulp.js я передаю все HTML-файлы из examples
папка в build
папка.
Создать глоток не сложно:
var gulp = require('gulp');
gulp.task('examples', function() {
return gulp.src('./examples/*.html')
.pipe(gulp.dest('./build'));
});
Но я не могу понять, как извлечь имена файлов, найденные (и обработанные) в задаче, или я не могу найти подходящий плагин.
7 ответов
Я не уверен, как вы хотите использовать имена файлов, но одно из них должно помочь:
Если вы просто хотите увидеть имена, вы можете использовать что-то вроде
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
, который позволяет вам предоставить свою собственную функцию и посмотреть на файлы в трубе.
Я обнаружил, что этот плагин делает то, что ожидал: 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
Вот еще один простой способ.
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'));
});
Вы можете использовать модуль 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
Для моего случая глоток-игнор был идеальным. Как вариант, вы можете передать функцию там:
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/'));
});
Если вы хотите использовать ответ @OverZealous ( /questions/5054414/poluchit-tekuschee-imya-fajla-v-gulpsrc/5054430#5054430) в Typescript, вам нужно import
вместо require
:
import * as debug from 'gulp-debug';
...
return gulp.src('./examples/*.html')
.pipe(debug({title: 'example src:'}))
.pipe(gulp.dest('./build'));
(Я также добавил title
).
Я использую gulp- Flatmap
Я даже могу заставить каждую вкладку браузера HTML-страницы автоматически называться по имени файла.
для получения дополнительной информации вы можете найти этот шаблон gulp полезным