Эта цитата говорит вам:
Когда RequireJS работает в узле, он может загружать модули в действительно синхронным способом, когда называется requirejs(module_name)
. Обратите внимание, что это не имеет эквивалента, когда RequireJS работает в браузере. Да, вы можете сделать requirejs(module_name)
на стороне браузера, но это будет работать только без ошибок, если модуль имеет уже загружен, и эта загрузка происходит асинхронно. Это не синхронно. Тем не менее, тот же вызов, выполняемый через RequireJS, когда он работает в узле, действительно синхронный.
Однако, когда вы вызываете его, передавая список зависимостей и обратный вызов, обратный вызов будет вызываться асинхронно. Вызов формы requirejs([], function() {})
является асинхронным как в браузере, так и в узле.
В комментарии вы спросите:
Я немного запутался, если это синхронно загружаются в любом случае, почему бы просто не использовать requirejs('foo')
?
Если этот вызов предназначен для запуска только в узле, то вам не нужно беспокоиться об использовании асинхронной формы вызова. Однако, если вы пишете код, который должен быть запущен в Node, и в браузере, вы должны быть осторожны с тем, как вы используете такой вызов. Для экземпляра main.js
файла, который делает:
requirejs.config({...})
var foo = requirejs('foo');
foo.whatever();
в лучшем случае не в состоянии периодически в браузере. По крайней мере, время от времени он поднимает "module not yet loaded for context" error. Если вы хотите, чтобы код работал без ошибок, вам необходимо:
requirejs.config({...})
requirejs('foo', function (foo) {
foo.whatever();
});
Не это ли именно то, что говорится в цитате? – Amberlamps
afaik: «требовать» узла и требовать от requireJS не имеют ничего общего, двух разных разных миров. Просто одно и то же слово, используемое для определения функции загрузки. – antpaw
. Я немного смущен, если он синхронно загружается, почему бы просто не использовать requirejs ('foo')? –