【问题标题】:Node's module.exports comes back as an empty objectNode 的 module.exports 以空对象的形式返回
【发布时间】:2020-04-05 15:46:57
【问题描述】:

我正在尝试为 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 设置为返回对象以及其他内容的自调用函数——但无济于事。如何让它只返回修饰符对象?它需要可扩展,因此我想返回一个对象。

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

【问题讨论】:

    标签: node.js gruntjs require


    【解决方案1】:

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

    类似的测试:

    console.log(modifiers);
    

    console.log(modifiers.modify);
    

    如果您的模块工作正常,将显示您的预期。

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

    【讨论】:

    • 谢谢。另外,我在调用文件中错误地引用了导出的对象。发布这个让我看到了这一点。
    • 不知道 JSON.stringify,这很好知道。我检查了 MDN 文档,你是完全正确的。非常感谢!一旦它允许我会接受(必须等待 10 分钟)......
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 2016-02-03
    • 2018-12-16
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多