web-dev-qa-db-fra.com

Gulp - copier et renommer un fichier

Je suis extrêmement nouveau à Gulp. J'essaie essentiellement de rechercher un fichier JavaScript modifié, puis d'en créer une nouvelle copie avec un nouveau nom. (il y aura éventuellement un traitement, mais Rome ne s’est pas construite en un jour).

Ma tentative (naïve) est la suivante:

gulp.task('default', function() {

    return gulp.watch('../**/**.js', function(obj){
        gulp.src(obj.path)
            .pipe(gulp.dest('foobar.js'));
    });

});

Cela prend le fichier modifié et le copie avec succès dans un dossier maintenant appelé foobar.js. Y a-t-il quelque chose de simple pour remplacer gulp.dest('foobar.js') par un simple copier/renommer le fichier src?


MODIFIER

Par copie en place, je veux dire que je veux prendre le fichier modifié et en faire une copie à droite où il se trouve actuellement avec un nouveau nom. L'équivalent de cliquer sur le fichier (dans Windows) et d'appuyer sur control-c control-v, puis de renommer le fichier obtenu.

55
Adam Rackis

Je ne suis pas sûr à 100% de ce que vous entendez par

copier et renommer ... en place

Mais, en fonction de votre code actuel, si vous souhaitez simplement:

  1. Regarder tout .js fichiers dans le répertoire parent et
  2. Copiez-les dans le cwd (répertoire de travail actuel) et
  3. Nom toutes copies, peu importe du fichier source, le même chose

Ensuite, vous pouvez utiliser gulp-rename pour le faire:

var gulp = require('gulp');
var rename = require('gulp-rename');

gulp.task('default', function() {
  return gulp.watch('../**/**.js', function(obj) {
    gulp.src(obj.path)
      .pipe(rename('newFileName.js'))
      .pipe(gulp.dest('.'));
  });
});

Dans ce cas, le nom du fichier de sortie est newFileName.js

Pour utiliser le module, vous devez installer le gulp-rename package avec npm (c'est-à-dire: npm install gulp-rename).

D'autres exemples sont disponibles sur la page de détails du paquet sur npm @ https://www.npmjs.com/package/gulp-rename#usage

74
knksmith57

Ce n’était pas beau d’y arriver, mais au final, c’est ce que je voulais (avec un peu de transpiling ES6 au milieu).

La clé semble être l'objet options avec une propriété de base dans l'appel à src. Cela semble être ce qui est nécessaire pour maintenir le chemin du fichier actuel dans l'appel à dest.

var gulp = require('gulp'),
    rename = require('gulp-rename'),
    babel = require('gulp-babel');

gulp.task('default', function() {
    return gulp.watch('../**/$**.js', function(obj){
        if (obj.type === 'changed') {
            gulp.src(obj.path, { base: './' })
                .pipe(babel())
                .pipe(rename(function (path) {
                    path.basename = path.basename.replace('$', '');
                }))
                .pipe(gulp.dest(''));
        }
    });
});
10
Adam Rackis