it-swarm.com.ru

Gulp - скопировать и переименовать файл

Я чрезвычайно новичок в Gulp. Я в основном пытаюсь найти модифицированный файл JavaScript, а затем сделать его новую копию с новым именем. (в конечном счете это будет обработано, но Рим не был построен за один день).

Моя (наивная) попытка такая:

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

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

});

Это берет измененный файл и успешно копирует его в папку, которая теперь называется foobar.js. Есть ли что-нибудь простое, что я могу заменить gulp.dest('foobar.js') на что просто скопировать и переименовать файл src на месте?


Правка

Под копией на месте я имею в виду, что хочу взять измененный файл и правильно сделать его копию там, где он сейчас находится с новым именем. Эквивалент щелчка по файлу (в окнах) и нажатия control-c control-v, а затем переименования получившегося файла.

53
Adam Rackis

Я не уверен на 100%, что вы подразумеваете под

скопировать и переименовать ... на месте

Но, исходя из вашего текущего кода, если вы просто хотите:

  1. Просмотрите все .js файлы в родительском каталоге и
  2. Скопируйте их в cwd (текущий рабочий каталог) и
  3. Назовите все копии, независимо от исходного файла, одинаковые вещь

Тогда вы можете использовать gulp-rename для этого:

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

В этом случае имя выходного файла - newFileName.js

Чтобы использовать модуль, вам нужно установить пакет gulp-rename с npm (то есть: npm install gulp-rename).

Дополнительные примеры доступны на странице сведений о пакете по адресу npm @ https://www.npmjs.com/package/gulp-rename#usage

69
knksmith57

Это было не очень красиво, но в итоге оказалось, что это то, чего я хочу (с небольшим количеством ES6 в середине).

Ключом представляется объект параметров с базовым свойством в вызове src. Похоже, это то, что необходимо для поддержания пути к текущему файлу при вызове 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