【问题标题】:Loop through a list and run gulp task遍历列表并运行 gulp 任务
【发布时间】:2020-09-08 19:25:44
【问题描述】:

我正在尝试遍历文件名列表,移动文件并压缩它们,然后在 gulp 中删除文件。我一直遇到下一个任务在上一个任务完成之前启动的问题。

函数 moveFiles(cb) {

folders.forEach(function(item,index){
    var _tmp = '../final_files/' + item;

      return Promise.all([
        new Promise(function(resolve, reject) {
           gulp.src('../' + item + '/**/*').pipe(gulp.dest(_tmp))
            .on('end', resolve)
        }),
        new Promise(function(resolve, reject) {
             gulp.src('../master/assets/**/*.*').pipe(gulp.dest(_tmp + '/assets/'))
            .on('end', resolve)
        }),
        new Promise(function(resolve, reject) {
             gulp.src([_tmp + '/**', _tmp + '/style/**', _tmp + '/js/**'], {base: "./"})
                .pipe(replace('../master/assets', 'assets'))
                .pipe(gulp.dest('.'))   
                .on('end', resolve)   
        }), 
        new Promise(function(resolve, reject) {
            return gulp.src(_tmp + '/**/*.*')
                .pipe(zip(item + '.zip'))
                .pipe(gulp.dest( '../final_files/'))
                .on('end', resolve) 
        }),         
      ]).then(function () {
         return gulp.src(_tmp, {read: false}).pipe(clean({force: true}));                   
      });       


});

}

我试图将其分解为任务,但我不知道如何将参数传递给任务,或者让任务等待它完成。任何方向将不胜感激。

问候

【问题讨论】:

标签: node.js gulp


【解决方案1】:

这是我想出的:

function moveFiles(cb) {

    const files = folders.map( function (item) {

        let _tmp = '../final_files/' + item;

        let _mv = async () => {
            return promisifyStream( gulp.src('../' + item + '/**/*').pipe(gulp.dest(_tmp)) );
        };
        let _mv_assets = async () => {
            return promisifyStream( gulp.src('../master/assets/**/*.*').pipe(gulp.dest(_tmp + '/assets/')) );
        };
        let _replce = async () => {
            return promisifyStream( gulp.src([_tmp + '/**', _tmp + '/style/**', _tmp + '/js/**'], {base: "./"}).pipe(replace('../master/assets', 'assets')).pipe(gulp.dest('.')) );
        };          
        let _zip = async () => {
            return promisifyStream( gulp.src(_tmp + '/**/*.*').pipe(zip(item + '.zip')).pipe(gulp.dest( '../final_files/')) );
        };                  
        let _clean = async () => {
            return promisifyStream( gulp.src(_tmp, {read: false}).pipe(clean({force: true})) );
        };              
        let tsk = series(_mv, _mv_assets, _replce, _zip, _clean);

        tsk();

    });

    cb();
}


function promisifyStream(stream) {
    return new Promise( res => stream.on('end',res));
}

虽然 _clean 没有完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多