2012-03-16 6 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

2

試してみてください。

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

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

あなたの例では、任意のコンテキストで動作しないでしょう。

関連する問題