Ich habe ein Verzeichnis lib/grunt-tasks
parallel zu meinem Gruntfile.js
. Es enthält eine zip.js
Datei (geladen über loadTasks
). Es erfordert die node-archiver und fs
Module.Grunt + benutzerdefinierte Knoten-Archiver-Task funktioniert nicht
Aus irgendeinem Grund, obwohl die ZIP-Datei erstellt wird, enthält es nichts nach archive.finalize()
und löst nie die entry
oder error
Ereignisse.
Ich bekomme auch keine Fehler, die die 2 Module erfordern, also glaube ich nicht, es gibt kein Problem für die Aufgabe, das Elternverzeichnis node_modules
im Stammverzeichnis meines Projekts zu sehen.
Ich kann ein ähnliches JS-Skript von der Befehlszeile erfolgreich ausführen: node lib/grunt-tasks/test.js
... mit hart-codierten Pfaden. Ich frage mich, ob etwas Grundlegendes an Grunt und/oder Node fehlt. Ich bin nur überrascht, dass ich keine Fehler sehe.
Jede Hilfe wird geschätzt.
/**
* 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();
});
});
}