Gulp - 复制并重命名文件

Gulp - copy and rename a file

我对 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 文件吗?


编辑

就地复制,我的意思是我想获取修改后的文件,并使用新名称在当前所在的位置复制它。相当于单击文件(在 windows 中)并按下 control-c control-v,然后重命名生成的文件。

我不是 100% 确定你的意思

copy and rename ... in place

但是,根据您当前的代码,如果您只是希望:

  1. 观看目录和
  2. 中的所有.js个文件
  3. 将它们复制到cwd(当前工作目录)和
  4. 名称全部份,不管源文件,一样

然后您可以使用 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

为了使用该模块,您需要使用 npm 安装 gulp-rename 包(即:npm install gulp-rename)。

npm @ https://www.npmjs.com/package/gulp-rename#usage

上的包详细信息页面上提供了更多示例

到达那里并不是很顺利,但最后看来这就是我想要的(中间有一些 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(''));
        }
    });
});