Node的module.exports作为空对象返回

时间:2016-11-17 22:52:53

标签: node.js gruntjs require

我正在尝试为grunt构建过程构建一些实用程序模块。显然我对模块系统的工作原理感到困惑,但这就是我所拥有的(省略了功能逻辑,因为它不相关):

var modifiers = {
    task: function(grunt){
       //logic...
    }
}

var modify = function(grunt){ 
    modifiers.task();
}

module.exports = {
    modify: modify
};

然后从调用文件:

var modifiers = require('./modifiers');

// later in file....
grunt.log.writeln(JSON.stringify(modifiers)); //outputs: {}

因此日志调用输出一个空对象。调用modifiers.modify会出错:

Warning: modifiers.modify is not a function

我完全错过了module.exports的工作原理吗?我在其他文件中使用它来导出函数,但我真的需要整个私有变量语义。

我还尝试将module.exports设置为自动调用函数,该函数返回一个对象以及其他内容 - 无济于事。如何让它只返回修饰符对象?它需要是可扩展的,因此我想要返回一个对象。

任何帮助都会很大。感谢。

1 个答案:

答案 0 :(得分:2)

JSON.stringify()没有序列化函数属性,因为modifiers对象只有一个属性是函数,JSON.stringify()显示一个空对象。

像以下一样的测试:

console.log(modifiers);

console.log(modifiers.modify);
如果您的模块正常工作,

将显示您的期望。

如果调用modifiers.modify()会产生错误,那么加载./modifiers模块时必须出错,并且您的控制台在加载时应显示某种错误。