使用nodejs,grunt或gulp合并文件夹的最佳方法

时间:2014-07-08 06:18:02

标签: node.js gruntjs gulp

我有两个文件夹,我只想合并它们(当存在时使用ExtendedFolder文件覆盖BaseFolder文件)

示例:

BaseFolder ---main.js ---test.js

ExtendedFolder ---main.js

预期结果:

ResultFolder ---main.js (from ExtendedFolder) ---test.js (from BaseFolder)

我提出了类似的问题但没有令人满意的答案:Grunt. Programmatically merge corresponding files in parallel folders with concat

2 个答案:

答案 0 :(得分:1)

编辑:我刚刚意识到我之前的回答是行不通的。我正在发布新代码。

如果您只有两个指定的文件夹并希望合并其内容,那么gulp就会非常简单(这假设文件夹名称之前已知并且不会更改):

var gulp = require('gulp');

gulp.task('moveBase',function(){
    return gulp.src('BaseFolder/*')
        .pipe(gulp.dest('ResultFolder/'));
});
gulp.task('moveExtended',['moveBase'],function(){
    return gulp.src('ExtendedFolder/*')
        .pipe(gulp.dest('ResultFolder/'));
});
gulp.task('mergeFolders',['moveBase','moveExtended']);

BaseFolder中与ExtendedFolder中的文件同名的文件会被覆盖。 这里的关键是复制的顺序。首先,复制其文件应该被覆盖的文件夹,以防发生冲突。您可以将复制拆分为两个任务并利用依赖关系系统 - 任务moveExtended取决于moveBase,以确保以后复制它。

答案 1 :(得分:1)

我能够使用https://www.npmjs.org/package/event-stream

完全按照我的意愿行事
var gulp = require('gulp')
        , es = require('event-stream');

gulp.task('web_dev', function () {
    es.merge(gulp.src('./BaseFolder/**/*')
            , gulp.src('./ExtendedFolder/**/*'))
            .pipe(gulp.dest('out'));
});