我有以下代码:
// jira.js
var exports = module.exports = {};
module.exports = function () {
var exported = {};
..
exported.myMethod= function (bugId, done) {
..
}
..
return exported;
};
我想在同一目录中使用其他文件bugs.js中的myMthod函数:
var exports = module.exports = {};
var jira = require('./jira');
module.exports = function () {
var exported = {};
..
exported.secondMethod= function (bugId, done) {
jira.myMethod(...) {
}
..
}
..
return exported;
};
当我尝试从bugs.js访问myMthod时,我得到'undefined'。在调用jira.myMthod()之后执行console.log(jira)jyst时,我看到整个js文件已经注销。
我如何让这个工作?
请指教,
谢谢!
答案 0 :(得分:1)
因为jira中的module.exports是一个函数,所以你需要执行它来获取返回的值(你可以这样做:var jira = require('./jira')();
它将返回导出的函数)。
但在我看来,这是多余的。我更喜欢这种语法:
// jira.js
function myMethod (bugId, done) {
..
}
..
return {
myMethod : myMethod
};
这将是什么,当你需要jira时,它将运行代码(在这种情况下,定义函数)并将返回它
答案 1 :(得分:1)
当您需要模块时,require(...)
的结果是分配给该模块中module.exports
的任何内容。在这种情况下,您将分配一个函数,该函数返回具有所需方法的对象。
所以要么将其用作:
var jira = require('./jira')();
jira.myMethod();
或将jira.js更改为:
var exports = module.exports = {};
exports.myMethod = function (bugId, done) {
..
}
答案 2 :(得分:0)
这简化了将导出的对象设置为变量,然后将module.exports设置为等于该var。然后在导入时,只需要该文件并使用导入的文件,就像它是普通对象一样。
要导出:
// jira.js
var jira = {};
...
jira.myMethod = function (bugId, done) {
...
}
...
module.exports = jira;
访问:
//bugs.js
var jira = require('./jira');
var bugs = {};
..
bugs.secondMethod= function (bugId, done) {
jira.myMethod(...);
..
}
..