Синхронная загрузка модулей в браузере проблематична. Конструкция типа:
var x = require('something_remote.js')
Подразумевает, что браузер остановит ваш код (т.е. заблокирует), пойдет и извлечет удаленный файл, проанализирует его и вернет вам экспорт. Но это не согласуется с однопоточным браузерным окружением - мы бы остановили основной поток JavaScript (и, следовательно, интерактивность страниц для пользователя) на производительности сети. Таким образом, браузеры развивались против этого сценария, предпочитая асинхронную загрузку по собственному расписанию. Здесь есть хорошая дискуссия:
http://www.sitepen.com/blog/2010/07/16/asynchronous-commonjs-modules-for-the-browser-and-introducing-transporter/
Один шаблон, который может сработать, заключается в том, что реализация require () блокирует синхронно, извлекает файл через XHR и затем проверяет его, но, похоже, он работает против всей поддержки / инфраструктуры браузера для асинхронной загрузки на основе файлов. Также мне любопытно, какое значение это может иметь для междоменного примитива безопасности браузера.
Итак, чтобы соответствовать модели асинхронной загрузки браузера, нам нужно использовать механизм обратного вызова, такой как:
require("something.js", function () { // called later, after something.js has loaded! })
Похоже, что RequireJS делает это:
http://requirejs.org/docs/start.html
Возможно, дайте этому шанс?
Среды JavaScript, такие как NodeJS и т. Д., Созданные с возможностью загрузки «локальных» модулей с диска вместо хостов сторонней сети, могут выполнять синхронную загрузку.
Буду очень признателен за любые исправления от экспертов JS: -)