2016-11-17 35 views
0

我试图为一个咕噜生成过程构建一些实用程序模块。显然,我在模块系统是如何工作的困惑,但这里是我(留出功能逻辑,因为它是不相关的):节点的module.exports作为空对象返回

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设置为一个自调用函数,该函数返回一个对象以及其他东西 - 无济于事。我如何获得它只是返回修饰符对象?它需要是可扩展的,因此我想返回一个对象。

任何帮助将是巨大的。谢谢。

回答

2

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

像一个试验:

console.log(modifiers); 

console.log(modifiers.modify); 

会告诉你会发生什么,如果你的模块是否正常工作。

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

+0

谢谢。另外,我在调用文件中错误地引用了导出的obejct。发布这个帮助我看到了这一点。 – dudewad

+0

不知道关于JSON.stringify,这是很好的知道。我检查了MDN文档,你完全正确。非常感谢!一旦它让我接受(必须等待10分钟)... – dudewad