【问题标题】:Gulp - copy and rename a fileGulp - 复制和重命名文件
【发布时间】:2023-12-22 12:07:01
【问题描述】:

我对 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,然后重命名生成的文件。

【问题讨论】:

    标签: javascript gulp gulp-watch


    【解决方案1】:

    我不是 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

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

    更多示例可在 npm @https://www.npmjs.com/package/gulp-rename#usage 的包详细信息页面上获得

    【讨论】:

    • +1 - 非常感谢。对于不清楚的问题,我深表歉意。我对我的问题进行了编辑,希望能够澄清。
    • @AdamRackis,使用您更新的代码,我无法重现该问题。您是否100% 肯定更改没有发生在复制文件而不是源文件中?如果您在gulp.src 行之前console.log(obj.path),您能否验证触发监视任务回调的是源文件
    • 啊-考虑一下文件更改正在覆盖先前修改的文件,这会触发新文件。非常感谢帮忙。我会给你更多的支持:)
    • 啊!这就说得通了。很高兴我能帮上忙-谢谢你的支持 :)
    • 很高兴看到您在这个网站上呆了 2 年后终于找到了一个要回答的问题!再次感谢:)
    【解决方案2】:

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

    【讨论】: