模块函数在外部脚本中未定义

Module functions appear undefined in outside scripts

这段代码告诉我解析函数不是一个函数:

const  MyModule = require('./MyModule.js');

MyModule.parse('...');

在我的模块脚本中,它是这样定义的:

MyModule = {};

MyModule.parse = function(data){

};


module.exports.MyModule = MyModule;

我做错了什么?

首先,您需要在定义对象中添加关键字。 const MyModule = {}; 然后导出指定为常量的对象,因此您需要像这样从中调用对象: MyModule.MyModule.parse('...')

你必须明白你不是在导出 MyModule 而是一个对象(module.exports 准确地说)有一个名为 MyModule 的成员(这是你分配给它的)。

如果在需要 MyModule 的代码中,您 console.log 需要的结果,它看起来像:

{ MyModule: {parse: [Function] } }

这是一个 module.exports 对象,它有一个名为 MyModule 的 属性(对象),它有一个名为 parse 的 属性(函数)。

因此,当您需要时,您将获得分配给 MyModule 的 module.exports 对象,而不仅仅是 MyModule。

如果您要将 module.exports 代码更改为:

module.exports.X = MyModule;

您需要 MyModule 的代码将记录:

{ X: {parse: [Function] } }

你会称它为

MyModule.X.parse(...).

如果您随后将代码更改为

const MyFabulousModule = require('./MyModule'); 

你会这样称呼它:

MyFabulousModule.X.parse(...);

最后,如果您在模块中添加了另一行:

module.exports.Y = 4;

然后在你的调用代码中添加:

console.log(MyFabulouseModule.Y);

您会看到值 4 记录到控制台。

代码:

MyModule.js

const MyModule = {};
MyModule.parse = function(data) {
    console.log(data);
};

module.exports.X = MyModule;
module.exports.Y = 4;

test.js

const MyModule = require("./MyModule");

console.log(MyModule);

MyModule.X.parse("hello world");

console.log(MyModule.Y);

至运行:节点test.js