2015-02-18 9 views
34

Ich bin extrem neu in Gulp. Ich versuche grundsätzlich, nach einer modifizierten JavaScript-Datei zu suchen und dann eine neue Kopie mit einem neuen Namen zu erstellen. (Irgendwann wird es etwas Verarbeitung geben, aber Rom wurde nicht an einem Tag gebaut).Gulp - eine Datei kopieren und umbenennen

Mein (naive) Versuch ist dies:

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

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

}); 

Dies nimmt die geänderte Datei und erfolgreich kopiert sie in einen Ordner jetzt foobar.js genannt. Gibt es etwas einfaches, das ich ersetzen kann gulp.dest('foobar.js') mit dem wird einfach kopieren und benennen Sie die src-Datei an Ort und Stelle?


EDIT

Mit Kopie an Ort und Stelle, ich meine, ich will die geänderte Datei nehmen, und eine Kopie davon macht richtig wo es derzeit mit einem neuen Namen. Dies entspricht dem Klicken auf die Datei (in Windows) und dem Drücken von control-c control-v und dem anschließenden Umbenennen der resultierenden Datei.

Antwort

52

Ich bin nicht 100% sicher, was Sie von

Kopie bedeuten und benennen ... anstelle

Aber, basierend auf dem aktuellen Code, wenn Sie einfach nur zu wünschen:

  1. Uhr alle .js Dateien im Eltern Verzeichnis und
  2. Kopieren Sie sie auf die cwd (aktuelle Arbeitsverzeichnis) und
  3. Namen alle Kopien, unabhängig der Quelldatei, die elbe

Dann Sie gulp-rename genau das zu tun verwenden:

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

In diesem Fall ist der Ausgabedateiname ist newFileName.js

Um das Modul zu verwenden, müssen Sie das gulp-rename Paket mit npm installieren (dh: npm install gulp-rename).

Weitere Beispiele sind auf der Paketdetail Seite auf npm verfügbar @https://www.npmjs.com/package/gulp-rename#usage

+1

+1 - vielen Dank. Ich entschuldige mich für die unklare Frage. Ich warf eine Bearbeitung meiner Frage, um sie hoffentlich zu klären. –

+0

@AdamRackis, mit Ihrem aktualisierten Code kann ich das Problem nicht reproduzieren.Sind Sie ** 100% ** positiv, dass die Änderung nicht in der kopierten Datei statt in der Quelldatei erfolgt? Wenn Sie 'console.log (obj.path)' vor Ihrer 'gulp.src'-Zeile haben, können Sie überprüfen, ob es die ** Quelldatei ** ist, die den Watch Task Callback auslöst? – knksmith57

+0

Ah - darüber nachdenken die Datei Änderung überschreibt die vorherige geänderte Datei, die eine neue Datei auslöst. Vielen Dank für die Hilfe. Ich hole dir noch ein paar Upvotes :) –

6

Es war ziemlich nicht dorthin zu gelangen, aber am Ende scheint es das ist, was ich (mit etwas ES6 transpiling in der Mitte) will.

Der Schlüssel scheint das Optionsobjekt mit einer Basiseigenschaft im Aufruf von src zu sein. Das scheint erforderlich zu sein, um den Pfad der aktuellen Datei in dem Aufruf an dest beizubehalten.

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