我已经开始使用Gulp JS并且必须承认我发现它非常有用.
我需要执行的任务之一是将一组文件夹压缩成单独的zip文件,每个文件夹一个,然后将所有这些压缩文件压缩成一个zip文件.使用Gulp-Zip我已经成功地做到了这一点:
var modelFolders = [
'ELFH_Check',
'ELFH_DDP',
'ELFH_Free'
];
gulp.task('zipModels', function () {
for (var i = 0; i < modelFolders.length; i++) {
var model = modelFolders[i];
gulp.src('**/*', {cwd: path.join(process.cwd(), '/built_templates/' + model) })
.pipe(zip(model + '.zip'))
.pipe(gulp.dest('./built_templates'));
};
});
Run Code Online (Sandbox Code Playgroud)
这适用于输出ELFH_Check.zip,ELFH_DDP.zip和ELFH_Free.zip.但是,我需要将这些zip文件压缩成一个名为"Templates.zip"的zip文件,我还没有设法让这个任务起作用:
// zip up model files
gulp.task('zipTemplate', ['zipModels'], function () {
gulp.src('*.zip', {cwd: path.join(process.cwd(), './built_templates/') })
.pipe(zip('Templates_.zip'))
.pipe(gulp.dest('./built_templates'));
});
Run Code Online (Sandbox Code Playgroud)
有谁知道这是可能的还是我做错了什么?
我也看到了这个问题,似乎与cwd某种选择有关.我会进一步调查.
在@OverZealous评论之后,我进一步调查并发现了两个问题:
正如他所说,你需要提示gulp等待依赖任务(zipModels)的结束,从中返回一个流.由于您有多个流,因此可以使用它event-stream.merge来返回捆绑流.
捆绑zip不起作用的原因是因为你cwd指向/built_templates/,而第二个斜线导致一些问题.要正常工作,您需要删除尾部斜杠,因此它应该是path.join(process.cwd(), '/built_templates').
重要
无论如何,你应该避免临时文件.Gulp的理念是尝试使用管道来避免IO.在那个方向上,你想要做的是切断中间dest步骤,merge流,zip它们,最后输出它们.
像这样的东西:
var es = require('event-stream');
var modelFolders = [
'ELFH_Check',
'ELFH_DDP',
'ELFH_Free'
];
gulp.task('zipModels', function () {
var zips = [],
modelZip;
for (var i = 0; i < modelFolders.length; i++) {
var model = modelFolders[i];
modelZip = gulp.src('**/*', {cwd: path.join(process.cwd(), '/built_templates/' + model) })
.pipe(zip(model + '.zip'));
// notice we removed the dest step and store the zip stream (still in memory)
zips.push(modelZip);
};
// we finally merge them (the zips), zip them again, and output.
return es.merge.apply(null, zips)
.pipe(zip('templates.zip'))
.pipe(gulp.dest('./'));
});
Run Code Online (Sandbox Code Playgroud)
通过文件夹(built_templates)的名称,您似乎还有一些其他任务将生成临时构建的文件.最好,你也不要这些.您应该将它们的流直接管道传输到ZIP流,最后一个传输到bundle-zip流.通过这样做,您将拥有一个简单的流流,一个磁盘读取,一个磁盘写入结束,没有临时文件.
如果您需要它们来执行不同的任务,请考虑使用一个函数来生成直到gulp.dest管道之前的步骤的函数,并在所有子任务上使用此函数.
此外,始终尝试通过返回a stream,a promise或接收callback函数来提示您的异步任务,并建议任务结束.
| 归档时间: |
|
| 查看次数: |
4904 次 |
| 最近记录: |