我有一个与lib/grunt-tasks
平行的目录Gruntfile.js
。它中有一个zip.js
文件(通过loadTasks
加载)。它需要node-archiver和fs
模块。
出于某种原因,虽然创建了.zip文件,但它在archive.finalize()
之后不包含任何内容,并且永远不会触发entry
或error
个事件。
我也没有得到任何需要2个模块的错误,所以我不认为在项目的根目录下查看父node_modules
目录的任务有任何问题。
我可以从命令行成功运行类似的JS脚本:node lib/grunt-tasks/test.js
...带有硬编码路径。我想知道Grunt和/或Node是否缺少一些基本的东西。我很惊讶我没有看到任何错误。
感谢任何帮助。
/**
* Zips key messages according to their config data
*
* @see 'app-config.js'
*/
'use strict';
var archiver = require('archiver');
var fs = require('fs');
module.exports = function (grunt) {
grunt.registerMultiTask('zip', function(){
// Load in task config and options
var config = this.data;
var data = config.data;
// Loop through all key messages and generate their .zip files
data.key_messages.forEach(function(message){
var srcDir = config.cwd + "/" + message.path;
var outputFile = config.cwd + '/' + data.project.id + '_' + message.id + '.zip';
// Create an actual file stream to output data to
var output = fs.createWriteStream( outputFile );
// Instantiate new archiver object
var archive = archiver('zip');
archive.on('error', function(err){
console.log('error:', err);
});
archive.on('entry', function(a, b, c){
console.log('entry:', a, b, c);
});
archive.pipe( output );
grunt.log.writeln('Compressing to ' + outputFile.cyan);
archive.bulk([
{cwd: srcDir, src: ['**/*'], expand: true}
]);
archive.finalize();
});
});
}
答案 0 :(得分:0)
这适用于Grunt中的任何异步进程(我不知道'node-archiver')......但仍然值得注意:
Per Grunt的文档中,应使用Grunt.task.async()设置异步过程,以防止任务过早完成/关闭。