Récupère le nom de fichier actuel dans gulp.src()

Dans ma gorgée.fichier js je diffuse tous les fichiers HTML du dossier examples dans le dossier build.

Pour créer la tâche gulp n'est pas difficile:

var gulp = require('gulp');

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

Mais je ne peux pas comprendre comment récupérer les noms de fichiers trouvés (et traités) dans la tâche, ou Je ne peux pas trouver le bon plugin.

122
demandé sur Andrew Marshall 2014-02-16 07:29:39

6 réponses

Je ne sais pas comment vous voulez utiliser les noms de fichiers, mais l'un d'entre eux devrait aider:

  • Si vous voulez juste pour voir les noms, vous pouvez utiliser quelque chose comme gulp-debug, qui répertorie les détails de l'vinyle fichier. Insérez ceci n'importe où vous voulez une liste, comme ceci:

    var gulp = require('gulp'),
        debug = require('gulp-debug');
    
    gulp.task('examples', function() {
        return gulp.src('./examples/*.html')
            .pipe(debug())
            .pipe(gulp.dest('./build'));
    });
    
  • Une autre option est gulp-filelog, ce que je n'ai pas utilisé, mais cela semble similaire (ça pourrait être un peu plus propre).

  • Une autre option est gulp-filesize, lequel affiche à la fois le fichier et sa taille.

  • Si vous voulez plus de contrôle, vous pouvez utiliser quelque chose comme gulp-tap, qui vous permet de fournir votre propre fonction et regardez les fichiers dans le tuyau.

153
répondu OverZealous 2014-02-16 03:37:49

J'ai trouvé ce plugin pour faire ce que j'attendais: clin d'oeil, à l'aide de

Exemple D'utilisation Simple: rechercher tous les fichiers dans le projet avec .jsx extension

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

Sortie:

[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
21
répondu Vikram 2014-05-22 22:40:14

Voici un autre moyen simple.

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'));
});
6
répondu Nick 2016-09-29 00:08:01

Vous pouvez utiliser le module gulp-filenames pour obtenir le tableau de chemins. Vous pouvez même les regrouper par espaces de noms:

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
répondu Serge 2015-09-11 16:26:19

Pour mon cas, gulp-ignorer était parfait. En option, vous pouvez y passer une fonction:

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

Et la tâche ressemblerait à ceci:

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

gulp.task('task', function() {
  gulp.src('./**/*.js')
    .pipe(gulpIgnore.exclude(condition))
    .pipe(gulp.dest('./dist/'));
});
3
répondu Lazyexpert 2016-04-11 08:09:02

Si vous voulez utiliser la réponse de @ OverZealous ( https://stackoverflow.com/a/21806974/1019307 ) dans Typescript, vous devez import au lieu de require:

import * as debug from 'gulp-debug';

...

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

(j'ai également ajouté un title).

1
répondu HankCa 2017-05-23 12:26:20