Как кроссплатформенный способ добавить модуль JavaScript в глобальную область? - PullRequest
3 голосов
/ 12 января 2012

Я просматривал исходный код store.js , в частности, как он добавляет себя в глобальную область:

if (typeof module != 'undefined') { module.exports = store }
else if (typeof define === 'function' && define.amd) { define(store) }
else { this.store = store }

Я понимаю последнее утверждение this.store = store а как насчет других?Что такое функции module и define?Разве this.store = store уже не работает во всех браузерах?

В целом, как правильно, кросс-браузерный способ добавить модуль в глобальную область видимости?

1 Ответ

4 голосов
/ 12 января 2012

Первый случай относится к CommonJS , который наиболее заметно используется в Node.js и является разновидностью AMD ( Определение асинхронного модуля ).Модуль - это файл JavaScript, который выполняется с определенным глобальным объектом модуля.Независимо от того, что для этого файла установлено значение module.exports, оно будет доступно для других частей приложения, а все остальное в файле останется закрытым только для этого модуля.Вот хорошая запись в блоге об этом.

Второй - для другого варианта AMD, который чаще всего реализуется с requirejs .Эта идея очень похожа на CommonJs, но чаще встречается в браузере.Фреймворк Dojo является хорошим примером фреймворка на основе amd.Сообщество Jquery также сильно отстает.define сообщает системе amd, что вы предоставляете ей модуль, который остальная часть приложения может использовать, используя require.

Финальная версия - это распространенный сценарий запуска в браузере с простым jane.this, скорее всего, DOMWindow, и, следовательно, объект хранилища становится глобальным для всей веб-страницы.

...