2016-07-19 11 views
0

私はディレクトリlib/grunt-tasksと私のGruntfile.jsとが平行です。それにはzip.jsファイルがあります(loadTasksでロード)。 node-archiverfsのモジュールが必要です。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(); 
     }); 
    }); 
} 

答えて

0

この兵卒内の任意の非同期プロセスのために行くだろう(私は知らなかったどの「ノード-アーカイバ」だった)...が、それでも注目に値する:

兵卒のマニュアルに従って、非同期処理をすべきですタスクが早期に完了/終了しないように、Grunt.task.async()を使用して設定してください。

関連する問題