web-dev-qa-db-fra.com

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

Dans mon fichier gulp.js, je diffuse tous les fichiers HTML du dossier examples dans le dossier build.

Créer la tâche d'abat 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 trouve pas le bon plugin.

131
dkastl

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

  • Si vous voulez seulement voir les noms, vous pouvez utiliser quelque chose comme gulp-debug , qui répertorie les détails du fichier vinyle. 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 , que je n’ai pas utilisée, mais qui sonne de la même manière (c’est peut-être un peu plus propre).

  • Une autre option est gulp-filesize , qui 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 de regarder les fichiers dans le tube.

166
OverZealous

J'ai trouvé ce plugin à faire ce que j'attendais: gulp-using

Exemple d'utilisation simple: Rechercher dans tous les fichiers du projet avec l'extension .jsx

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
Vikram

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

Vous pouvez utiliser le module gulp-filnames 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 
6
Serge

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

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
Lazyexpert

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 aussi ajouté un title).

0
HankCa