Не удается импортировать пользовательский модуль с require () в SDK надстройки Firefox - PullRequest
2 голосов
/ 17 марта 2012

Вот пример упрощенного кода для того, что я делаю.

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 () несколькими различными способами, и ни один из них, похоже, ничего не может сделать.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 17 марта 2012

Результатом функции require() является, по сути, переменная exports модуля - и вы не определили exports.bar. Так что либо вы вызываете foo.foo.bar() в вашем main.js, либо импортируете модуль немного по-другому:

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

Это то же самое, что и

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

Кроме того, как отмечает Эрикволд в своем ответе, вы действительно не определили exports.foo.bar.

2 голосов
/ 17 марта 2012

Попробуйте:

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

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

Ваш пример не будет работать ни в каком контексте.

...