NodeJS module.exports子模块

时间:2014-03-02 00:00:26

标签: javascript node.js

民间,   尝试包含其他.js文件,以便能够以下列方式从模块导出。这将使主模块更具可读性。我试图包含其他函数的代码。

我认为这不是正确的方法。有人可以指导我朝正确的方向发展吗?

主模块文件:

module.exports = {
    eval(fs.readFileSync('./extras/foo.js')+'');

    fdsa: function (barf, callback) {
    },
    asdf: function (barf, callback) {
    },
}

foo.js:

foo: function (barf, callback) {
     ...
     callback(err, result);
}

2 个答案:

答案 0 :(得分:5)

如果你想要 main.js 基本上复制和增强foo所拥有的一切(这很愚蠢,但这似乎就是你所要求的),你可以这样做:

<强> main.js

var foo = require('./extras/foo');
for (var prop in foo) {
  exports[prop] = foo[prop];
}
exports.fdsa = function(...
exports.asdf = function(...

<强> ./额外/ foo.js

exports.foo = function(...

旁注如果您将文件放在somedir/index.js中,则可能只需要somedir,这也很有用。

如果您只想通过main访问foo并且可以使用子命名空间,只需执行以下操作:

<强> main.js

exports.foo = require('./extras/foo');

然后您的调用代码可以执行:

require('./main').foo.foo(blah, callback);

另请注意,如果您希望整个foo模块成为一个函数,请执行以下操作:

module.exports = function foo(barf, callback) {...

答案 1 :(得分:0)

使用 es6 模块模式有一种非常简单的方法可以实现这一点。 所以在 foo.js

export function foo(barf, callback) {
     ...
     callback(err, result);
}

在 main.js 中,你会得到类似的东西,

export * from './foo.js';
export function fdsa(barf, callback) {
...
}