2012-03-16 54 views
2

下面是我正在做的一个简化代码示例。无法在Firefox插件SDK中使用require()导入自定义模块

foo.js(在lib目录):

exports.foo = function foo() { 
    this.bar = function() { 
     console.log("foobar!"); 
    }; 
}; 

main.js:

var foo = require("foo"); 
exports.main = function(options, callbacks) { 
    foo.bar(); 
} 

CMD:

>cfx run 
[...] 
error: An exception occurred. 
[...] 
TypeError: foo.bar is not a function 

所以基本上,我似乎无法做到任何与我导入的模块相关的东西。我在这里做错了什么?我尝试过用几种不同的方式来设置foo()函数的格式,而且它们都不能做任何事情。

谢谢!

回答

5

require()函数的结果本质上是模块的exports变量 - 并且您没有定义exports.bar。因此,无论你叫你的main.jsfoo.foo.bar()或导入模块略有不同:

var {foo} = require("foo"); 

这是一样的:

var foo = require("foo").foo; 

而且,erikvold音符在他的回答,你并没有真的定义exports.foo.bar

+0

谢谢,这是做到了。 – MikeASchneider 2012-03-19 14:20:24

2

尝试:

var foo = exports.foo = function foo() { 
}; 

foo.bar = function() { 
    console.log("foobar!"); 
}; 

你的榜样将不会在任何情况下工作。