如何在gulp中处理来自不同文件夹的资产

时间:2014-12-08 18:56:45

标签: javascript gulp

我有一个glob模式列表:

var assets = [
    '../projects.a/dir1/dir2/file1.js',
    '../projects.b/dir1/dir2/file2.js',
    './app/scripts/dir1/dir2/module.js'
];

我想创建一个任务,将所有由这些模式表示的文件复制到我的dest文件夹并保留结构。例如,在我的dest文件夹中,我想要以下内容:

'dest/projects.a/dir1/dir2/file1.js',
'dest/projects.b/dir1/dir2/file2.js',
'dest/app/scripts/dir1/dir2/module.js'

我构建了以下任务:

gulp.task('scripts', ['clean'], function() {
    return gulp.src(assets)
        .pipe(gulp.dest('dest'));
});

问题在于我得到了#dest;' dest'只有一级目录。例如:\

'dest/dir2/file1.js',
'dest/dir2/file2.js',
'dest/dir2/module.js'

知道出了什么问题吗?我怎么解决呢? 使用gulp处理来自不同文件夹的资产的常用方法是什么?

更新
查看Looking for way to copy files in gulp and rename based on parent directory,我尝试将{base: './'}设置为gulp.src(assets, {base: './'})的参数,但我将当前目录下的文件嵌套在另一个文件夹下。我没有得到所需的行为。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以单独处理不在当前目录下的文件。您可以使用单独的任务,或使用event-stream加入流:

var projectAssets = [
    '../projects.a/dir1/dir2/file1.js',
    '../projects.b/dir1/dir2/file2.js'
];
var assets = [
    './app/scripts/dir1/dir2/module.js'
];

var es = require('event-stream');

gulp.task('scripts', ['clean'], function() {
    return es.merge(gulp.src(assets, {base: './'}), gulp.src(projectAssets, {base: '../'}))
        .pipe(gulp.dest('dest'));
});