0

我想仅在已更改文件的同一文件夹中创建具有新扩展名的副本。应该如何src指定dest

var gulp = require('gulp'),
rename = require("gulp-rename"),
watch = require('gulp-watch');


var filePath = "./repo/**/*.xml"

gulp.task('watch', function () {    
    watch(filePath, gulp.series('rename'));
});


gulp.task('rename', function () {
    return gulp.src(???).pipe(rename(function (path) {
        path.extname = ".mei";
    })).pipe(gulp.dest(???));
});
4

1 回答 1

0

尝试这个:

var gulp = require('gulp'),
  rename = require("gulp-rename"),
  watch = require('gulp-watch'),
  changedInPlace = require('gulp-changed-in-place');


var filePath = "./repo/**/*.xml"

gulp.task('watch', function () {    
    watch(filePath, gulp.series('rename'));
});


gulp.task('rename', function () {
  return gulp.src(filePath)
    .pipe(changedInPlace())
    .pipe(rename(function (path) {
      console.log(path);
        path.extname = ".mei";
    }))
    .pipe(gulp.dest('repo'));
});

gulp.task('default', gulp.series('rename', 'watch'));

这使用gulp-changed-in-place插件仅传递同一目录中已更改的文件(在您的情况下filePath)。

它确实有一个firstRun选项,但我无法让它正常工作——也许这个选项不能很好地与 gulp v4 配合使用?要解决这个问题,在设置rename之前调用一次,请参阅watch

gulp.task('default', gulp.series('rename', 'watch'));

现在它只会更改已更改文件的扩展名,并将已更改的文件添加回它开始所在的同一目录。

于 2020-08-18T20:48:34.357 回答