0

我有一个lib/grunt-tasks与我的Gruntfile.js. 它有一个zip.js文件(通过加载loadTasks)。它需要节点归档器fs模块。

出于某种原因,尽管创建了 .zip 文件,但它之后不包含任何内容archive.finalize(),并且从不触发entryorerror事件。

我也没有收到任何需要 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();
        });
    });
}
4

1 回答 1

0

这适用于 Grunt 中的任何异步进程(我不知道“node-archiver”是)......但仍然值得注意:

根据 Grunt 的文档,应使用Grunt.task.async()设置异步进程,以防止任务过早完成/关闭。

于 2016-07-19T20:11:25.390 回答