0

lib/grunt-tasksと並行するディレクトリがありGruntfile.jsます。その中にzip.jsファイルがあります( 経由でロードされますloadTasks)。node-archiverfsモジュールが必要です。

何らかの理由で、.zip ファイルが作成されますが、 の後に何も含まれておらずarchive.finalize()entryまたはerrorイベントが発生しません。

また、2 つのモジュールを必要とするエラーも発生しないためnode_modules、プロジェクトのルートにある親ディレクトリを表示するタスクに問題はないと思います。

コマンドラインから同様の JS スクリプトを正常に実行できます: node lib/grunt-tasks/test.js...ハードコードされたパスを使用します。Grunt や Node.js について何か基本的なことが欠けているのではないかと思います。エラーが表示されないことに驚いています。

どんな助けでも大歓迎です。

/**
 * 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