Node.js 如何通过节点中的index.js公开所有模块类

Node.js 如何通过节点中的index.js公开所有模块类,node.js,module,Node.js,Module,我的目录结构如下: node_modules/mymodule/index.js: module.exports = require('./lib/mymodule'); 节点_modules/mymodule/lib/mymodule.js var A = require('./a'), function MyModule(){ var self = this; self.version = '0.0.1'; } /** * Expose MyModule */ m

我的目录结构如下:

node_modules/mymodule/index.js:

module.exports = require('./lib/mymodule');
节点_modules/mymodule/lib/mymodule.js

var A = require('./a'),

function MyModule(){
    var self = this;
    self.version = '0.0.1'; 
}

/**
 * Expose MyModule
 */
module.exports = MyModule;

/**
 * Expose A
 */
exports.A = A;
node_modules/mymodule/lib/a.js

function A(options) {
    console.log('A::constructor()');

};

User.prototype.test = function() {
    return "your test was successful";
};

module.exports = A;
我的问题来自尝试实例化A。在节点提示中,我得到以下信息:

> var MyModule = require('mymodule');
undefined // why do I get undefined here ?
> var mymodule = new MyModule();
undefined
> var A = MyModule.A;
undefined
> var a = new A();
TypeError: undefined is not a function
    at repl:1:9
    at REPLServer.eval (repl.js:80:21)
    at repl.js:190:20
    at REPLServer.eval (repl.js:87:5)
    at Interface.<anonymous> (repl.js:182:12)
    at Interface.emit (events.js:67:17)
    at Interface._onLine (readline.js:162:10)
    at Interface._line (readline.js:426:8)
    at Interface._ttyWrite (readline.js:603:14)
    at ReadStream.<anonymous> (readline.js:82:12)
将节点_modules/mymodule/lib/mymodule.js更改为:

您只能有一个模块。导出

节点将打印命令的返回值,在所有这些情况下,返回值都是未定义的。这并不意味着你的变量是未定义的

尝试:

然后


我只有一个。你是说我需要从a.js中取出module.exports吗?为什么要将我的构造函数更改为对象?这是故意的吗?事实上,你有出口。底部是A,它不能与module.exports一起工作。是的,我想把它变成一个对象,但我忘记了一些步骤:P,我现在就纠正它。为了便于您使用,我认为对象更易于使用;是否需要在底部?否导出后您仍然可以对myModule进行修改,因为对象是通过引用而不是值传递的。我再次编辑了我的脚本,如果您想使它更兼容,可以在我的代码中用导出替换所有出现的myModule
var exports = module.exports = {
  version: '0.0.1'
}

exports.A = require('./a');
> var A = MyModule.A;
> A