Dapatkan nama file saat ini di gulp.src ()

141

Di file gulp.js saya, saya mengalirkan semua file HTML dari examples folder ke dalam buildfolder.

Untuk membuat tugas gulp tidaklah sulit:

var gulp = require('gulp');

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

Tetapi saya tidak dapat menemukan cara mengambil nama file yang ditemukan (dan diproses) dalam tugas, atau saya tidak dapat menemukan plugin yang tepat.

dkastl.dll
sumber
Jika Anda telah memecahkan masalah Anda, Anda harus memposting jawaban Anda di bawah ini. Anda tidak boleh hanya mengedit pertanyaan Anda dengan solusinya.
Andrew Marshall
2
@AndrewMarshall ... sebagai komentar saya untuk edit, yang Anda hapus, menjelaskan, saya tidak ingin mengklaim telah menemukan jawaban yang benar tetapi ingin memberikan kredit untuk jawaban yang pantas menerimanya. Itu sebabnya saya tidak memposting modifikasi kecil sebagai jawaban. Jika menurut Anda, menghapus suntingan saya lebih baik bagi pengguna (atau hanya mematuhi aturan situs ini), maka saya setuju dengan itu. Untuk orang lain, cukup klik di riwayat edit untuk melihat apa yang ada sebelumnya.
dkastl

Jawaban:

176

Saya tidak yakin bagaimana Anda ingin menggunakan nama file, tetapi salah satu dari ini akan membantu:

  • Jika Anda hanya ingin melihat namanya, Anda dapat menggunakan sesuatu seperti gulp-debug, yang mencantumkan detail file vinyl. Sisipkan ini di mana pun Anda menginginkan daftar, seperti:

    var gulp = require('gulp'),
        debug = require('gulp-debug');
    
    gulp.task('examples', function() {
        return gulp.src('./examples/*.html')
            .pipe(debug())
            .pipe(gulp.dest('./build'));
    });
    
  • Pilihan lainnya adalah gulp-filelog, yang belum pernah saya gunakan, tetapi terdengar serupa (mungkin sedikit lebih bersih).

  • Opsi lainnya adalah gulp-filesize, yang menghasilkan file dan ukurannya.

  • Jika Anda menginginkan lebih banyak kontrol, Anda dapat menggunakan sesuatu seperti gulp-tap, yang memungkinkan Anda menyediakan fungsi Anda sendiri dan melihat file di dalam pipa.

Terlalu bersemangat
sumber
7
Terima kasih! Plugin "log" di tempat yang tidak saya cari, karena hanya menulis ke log konsol. Tetapi gulp-tapmemungkinkan untuk mendapatkan jalur untuk setiap file, sehingga saya dapat menggunakannya untuk memperbarui daftar saya di file HTML lain.
dkastl
Bagaimana jika saya ingin menyimpan semua file src dalam sebuah array? debug tidak memberikan banyak pilihan.
Abhinav Singi
25

Saya menemukan plugin ini melakukan apa yang saya harapkan: gulp-using

Contoh penggunaan sederhana: Cari semua file dalam proyek dengan ekstensi .jsx

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

Keluaran:

[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
Vikram
sumber
penggunaan teguk melakukan apa yang saya cari, terima kasih banyak.
sghosh968
11

Berikut cara sederhana lainnya.

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'));
});
Nick
sumber
5
Anda tahu, kebanyakan orang tidak tahu coffeescript, jadi akan jauh lebih bermanfaat jika hanya menulis jawaban dengan cara paling dasar agar jumlah pembaca maksimum akan menguntungkan :)
vsync
Bagi saya es.mapmelempar kesalahan:SyntaxError: Unexpected token .
vsync
2
1 untuk solusi ini (tanpa plugin). Tetapi ada bug, return cb(); seharusnya ada cb(null, file);. Jika tidak, file akan disaring dan tidak akan berjalan lebih jauh ke rantai pipa. Info lebih lanjut, periksa dokumen untuk es.map ()
Dimitry K
5

Anda dapat menggunakan modul gulp-filenames untuk mendapatkan array jalur. Anda bahkan dapat mengelompokkannya berdasarkan namespace:

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 
Serge
sumber
3

Untuk kasus saya, pengabaian-teguk itu sempurna. Sebagai opsi, Anda dapat meneruskan fungsi di sana:

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

Dan tugasnya akan terlihat seperti ini:

var gulpIgnore = require('gulp-ignore');

gulp.task('task', function() {
  gulp.src('./**/*.js')
    .pipe(gulpIgnore.exclude(condition))
    .pipe(gulp.dest('./dist/'));
});
Lazyexpert
sumber
0

Jika Anda ingin menggunakan jawaban @OverZealous' ( https://stackoverflow.com/a/21806974/1019307 ) di Naskah yang diketik, Anda perlu importbukannya require:

import * as debug from 'gulp-debug';

...

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

(Saya juga menambahkan a title).

HankCa
sumber
mengapa, importbukan require?
vsync
Ya, saya tidak tahu. Itu terjadi di hari-hari awal pengembangan JS saya dan sebagai refleksi, saya seharusnya lebih menyelidiki mengapa hal itu berhasil untuk saya. Tapi itu berhasil dan dengan demikian mengapa saya memasangnya!
HankCa