Модуль node.js / система экспорта: можно ли экспортировать модуль как функцию - PullRequest
0 голосов
/ 09 мая 2011

Я хочу сделать что-то подобное в Dispatch.js

function handle(msg) {
    ....
}
exports = handle;

и это в вызывающем index.js

var dispatch = require("./Dispatch);
dispatch("data");

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 09 мая 2011

exports = handle

Это создает локальную переменную с именем exports.Это отличается от перезаписи module.exports.

module.exports = handle

. Это перезаписывает переменную экспорта, находящуюся в области видимости модуля, которая затем будет прочитана require.

* 1013.* В браузере window["foo"] и foo одинаковы, однако в узле module["foo"] и foo ведут себя несколько иначе.

Контекст области локальной переменной и module - это не одно и то же.

1 голос
/ 09 мая 2011

Do:

function handle(msg) {
    ....
}
module.exports = handle;

и работает так, как вы хотите.

0 голосов
/ 06 марта 2012

Еще один способ увидеть проблему - подумать о том, как узел может загрузить ваш модуль:

function loadModule(module, exports) {

внутри здесь находится код вашего модуля

}

Если ваш код перезаписывает параметр exports (exports = handle), это изменение не видно снаружи этой функции.И для этой перезаписи можно использовать объект module.

Проблема не возникнет, если в области экспорта будет видима переменная, видимая в области видимости тела функции.

0 голосов
/ 06 марта 2012

Проблема, стоящая за этой проблемой (exports против module.exports против exports.something), лучше всего описана в этой статье:

http://www.alistapart.com/articles/getoutbindingsituations

Первая версия (exports = handle) именно в этом проблема: отсутствующее связывание, которое является обязательным в javascript:

exports = handle означает window.exports = handle (или любой другой узел.js, который имеет глобальный объект)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...