Geçerli dosya adını gulp.src () biçiminde al


138

Gulp.js dosyamdaki tüm HTML dosyalarını examplesklasörden klasöre veriyorum build.

Gulp görevi oluşturmak zor değildir:

var gulp = require('gulp');

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

Ancak görevde bulunan (ve işlenen) dosya adlarının nasıl alınacağını anlayamıyorum veya doğru eklentiyi bulamıyorum.


Sorununuzu çözdüyseniz, yanıtınızı aşağıya göndermelisiniz. Sen gerektiğini değil sadece çözüm ile sorunuzu düzenleyin.
Andrew Marshall

2
@AndrewMarshall ... düzenlemeye yaptığım yorum olarak, sildiğiniz, açıklıyor, doğru cevabı bulduğunu iddia etmek istemiyorum, ancak hak eden cevaba kredi vermek istiyorum. Bu yüzden küçük değişikliği cevap olarak göndermedim. Düzenlememi kaldırmanın kullanıcılar için daha iyi olduğunu düşünüyorsanız (veya yalnızca bu sitenin kurallarına uyuyor), o zaman sorun yok. Başkaları için, daha önce neler olduğunu görmek için düzenleme geçmişini tıklamanız yeterlidir.
dkastl

Yanıtlar:


174

Dosya adlarını nasıl kullanmak istediğinizden emin değilim, ancak bunlardan biri yardımcı olmalı:

  • Sadece adları görmek istiyorsanız gulp-debug, vinil dosyasının ayrıntılarını listeleyen benzer bir şey kullanabilirsiniz . Bunu, istediğiniz gibi bir liste istediğiniz yere ekleyin:

    var gulp = require('gulp'),
        debug = require('gulp-debug');
    
    gulp.task('examples', function() {
        return gulp.src('./examples/*.html')
            .pipe(debug())
            .pipe(gulp.dest('./build'));
    });
  • Başka bir seçenek, gulp-filelogben kullanmadım, ama benzer geliyor (biraz daha temiz olabilir).

  • Başka bir seçenek, gulp-filesizehem dosyayı hem de boyutunu çıktılar.

  • Daha fazla kontrol istiyorsanız, gulp-tapkendi işlevinizi sağlamanıza ve borudaki dosyalara bakmanıza izin veren gibi bir şey kullanabilirsiniz .


7
Teşekkür ederim! Aradığım şeyi değil "log" eklentileri, çünkü sadece konsol günlüğüne yazıyor. Ancak gulp-tapher dosya için yol almayı sağlar, bu yüzden başka bir HTML dosyasında listemi güncellemek için kullanabilirsiniz.
dkastl

Tüm src dosyalarını bir dizide saklamak istersem ne olur? debug pek çok seçenek sunmaz.
Abhinav Singi

22

Bu eklentiyi beklediğim şeyi yapıyor buldum: gulp-using

Basit kullanım örneği: .jsx uzantılı projedeki tüm dosyaları arayın

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

Çıktı:

[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 using aradığım şeyi çok teşekkürler yaptı.
sghosh968

10

İşte başka bir basit yol.

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'));
});

5
Bilirsiniz, çoğu insan kahve bilmiyor, bu yüzden cevabı en basit şekilde okuyucunun maksimum sayıda okuyucuya yazması çok daha yararlı olacaktır :)
vsync

Benim için es.mapbir hata atıyor:SyntaxError: Unexpected token .
vsync

1
Bu çözüm için +1 (eklentisiz). Ama bir hata var, bunun yerine return cb(); olması gerekiyor cb(null, file);. Aksi takdirde dosyalar filtrelenecek ve boru zincirinde daha fazla ilerlemeyecektir. Es.map ()
Dimitry K

5

Sen kullanabilirsiniz yudum-dosya adları yollarının dizisini almak için modül. Bunları ad alanlarına göre bile gruplandırabilirsiniz:

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 

3

Benim durumum için gulp-ignore mükemmeldi. Seçenek olarak oraya bir işlev iletebilirsiniz:

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

Ve görev şöyle görünecektir:

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

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

0

Eğer @OverZealous' cevabını (kullanmak istiyorsanız https://stackoverflow.com/a/21806974/1019307 daktilo) yapmanız gerekenler importyerine require:

import * as debug from 'gulp-debug';

...

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

(Ayrıca ekledim title).


neden importyerine require?
vsync

Evet bilmiyorum. Bu, JS gelişiminin ilk günlerimdeydi ve bunun yansıması olarak, bunun benim için neden işe yaradığına dair daha fazla araştırma yapmalıydım. Ama yaptı ve bu yüzden neden koydum!
HankCa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.