Как кроссплатформенный способ добавить модуль JavaScript в глобальную область?

Я взглянул на исходный код 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 ответ

Решение

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

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

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

Другие вопросы по тегам