使用gulp将多个指定文件和文件夹复制到另一个目录

4
我将使用gulp.srcgulp.dest从基础目录.复制多个文件和文件夹到新的子目录dist。基础目录是Symfony项目的根目录。以下是我的gulpfile:
var files = [
  './app**/*.*',
  './bin**/*.*',
  './src**/*.*',
  './tests**/*.*',
  './var/',
  './vendor/',
  './composer.json']

gulp.task('distribute', function() {
  return gulp.src(files , { base: '.' }).pipe(gulp.dest('./dist'));
});

我不明白为什么这个无法正常工作。结果是我得到了一个名为dist的文件夹,其中包含了指定文件夹的内容。所以像appbinsrc等根文件夹都不见了。

1个回答

12

移动目录本身

参考使用gulp选择和移动目录及其文件,在base选项中使用./,确保路径正确:

var files = [
  './app/**/*.*',
  './bin/**/*.*',
  './src/**/*.*',
  './tests/**/*.*',
  './var/',
  './vendor/',
  './composer.json'
];

gulp.task('distribute', function() {
  return gulp.src(files , { base: './' })
    .pipe(gulp.dest('dist'));
});

移动每个目录中的文件

不要使用base选项,并稍微更改您的路径。

var files = [
  'app/**/*.*',
  'bin/**/*.*',
  'src/**/*.*',
  'tests/**/*.*',
  'var/',
  'vendor/',
  'composer.json'
];

gulp.task('distribute', function() {
    return gulp.src(files)
        .pipe(gulp.dest('./dist'));
});

以灵活的方式将每个目录视为一个任务

如果您想移动文件夹本身,只需使用任务生成器函数为每个文件夹创建一个任务。

function moveDirTask(dir, dest) {
    return function() {
        return gulp.src(`${dir}/**/*`)
            .pipe(gulp.dest(`${dest}/${dir}/`));
    };
}

gulp.task('move-app', moveDirTask('app', 'dest'));
gulp.task('move-bin', moveDirTask('bin', 'dest'));
gulp.task('move-src', moveDirTask('src', 'dest'));
gulp.task('move-tests', moveDirTask('tests', 'dest'));
// etc.

gulp.task('distribute', [
    'move-app',
    'move-bin',
    'move-src',
    'move-tests'
    // etc.
], function() {
    return gulp.src('composer.json')
        .pipe(gulp.dest('dest'));
});

谢谢你的回答。但是这个方法只会复制前四个文件夹的内容,而不是整个文件夹本身。我该怎么做才能实现这个功能呢? - Kevin Glier
@KevinGlier 我更新了答案以反映您期望的行为。 - Emile Bergeron
@KevinGlier,将“base”设置为“./”,它是否正常工作? - Emile Bergeron
1
谢谢,"移动目录本身"对我有用。我只是将路径中的*.更改为单个,这样bin文件夹中的shell脚本也会被复制。 - Kevin Glier
我是一个Gulp新手,我已经按照官方说明这里进行操作,并且可以成功地执行他们的第一个default示例。但是,当我用你的第二个代码片段(带有相关文件名)替换gruntfile.js的内容并从命令行运行gulp时,我得到了ReferenceError: gulp is not defined。请问有人能告诉我我做错了什么吗?编辑:哦,我需要在gruntfile.js中添加var gulp = require('gulp'); - user1063287
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接