私はディレクトリlib/grunt-tasks
と私のGruntfile.js
とが平行です。それにはzip.js
ファイルがあります(loadTasks
でロード)。 node-archiverとfs
のモジュールが必要です。Grunt +カスタムノードアーカイバのタスクが機能しない
何らかの理由により、.zipファイルが作成されても、archive.finalize()
の後には何も含まれていませんが、entry
またはerror
というイベントは発生しません。
私は2つのモジュールを必要とするエラーもありません。そのため、私のプロジェクトのルートにあるnode_modules
ディレクトリの親ディレクトリを確認するのは問題ありません。
コマンドラインから同様のJSスクリプトを正常に実行できます。node lib/grunt-tasks/test.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();
});
});
}