在Grunt任务中使用节点模块失败

时间:2014-05-15 01:34:59

标签: node.js gruntjs exif exiftool

我正在尝试从Grunt任务中读取的文件中提取元数据。

在此文件上执行: node test.js

var exif = require('exif2');

exif('fixtures/forest.png', function (err, o) {
    console.log(arguments);
});

产生预期的输出

然而,执行grunt流程: grunt projectJSON

module.exports = function (grunt) {
    var exif = require('exif2');
    return grunt.registerMultiTask("projectJSON", "Creates project JSON file.", function () {
        exif('fixtures/forest.png', function (err, o) {
            console.log(arguments);
        });
    });

}

**请注意,我只是使用 fixtures / forest.png 文件进行测试

不产生任何输出。回调甚至没有被解雇。

当我在console.log exif时,我得到:[功能]

我错过了什么?我认为这不起作用是因为笨拙的任务,但我不知道如何解决它。将它包装在try-catch块中不会产生任何效果。

1 个答案:

答案 0 :(得分:3)

您需要使projectJSON任务异步 - 在调用exif回调之前Grunt正在退出。

查看Grunt documentation on asynchronous tasks.

这就是你可以使你的任务异步的方法:

module.exports = function (grunt) {
    var exif = require('exif2');

    grunt.registerMultiTask("projectJSON", "Creates project JSON file.", function () {
        // Make task asynchronous.
        var done = this.async();

        exif('fixtures/forest.png', function (err, o) {
            console.log(arguments);

            // Invoke the task callback to continue with
            // other Grunt tasks.
            done();
        });
    });

}