Как кроссплатформенный способ добавить модуль 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, и, таким образом, объект хранилища становится глобальным по всей веб-странице.