...将启用此模式:
var $ = require('jQuery');
我正在查看Require.js docs,而我能看到的只是回调版本,例如require(['jQuery'], function ($) { … });
答案 0 :(得分:1)
要求附带'CommonJS'模式,允许在代码中内联类似于Node的require语句。例如,这是一个典型的AMD定义,它将异步加载这些脚本:
define(['script1', 'script2'], function (script1, script2) {
});
但你也可以这样做:
define(function () {
var script1 = require("script1");
var script2 = require("script2");
});
并且Require也将异步处理这些。它的方式是,Require看到你没有指定一个依赖数组作为第一个参数,然后扫描代码中的Require语句。然后它以异步方式处理它们中的每一个。
但是,要回答您的问题,如果您将依赖关系数组指定为第一个参数并仍然使用CommonJS语法,则Require将同步处理require语句:
define([], function () {
// Each of these scripts will be loaded synchronously
var script1 = require("script1");
var script2 = require("script2");
});
文档::
答案 1 :(得分:0)
受浏览器的限制,加载脚本只能是异步的。因此,在Require.js中没有用于加载依赖项的同步版本。
但是,某些模块加载器确实有变通方法。例如,Sea.js提供同步版本(http://seajs.org/docs/en.html#quick-start),通过运行regexp来提取所有依赖项(https://github.com/seajs/seajs/blob/3d3c3bc142d9a6e3f6de14c1959d3f308b1c9e0e/src/module.js#L324)并在实际执行脚本之前异步加载它们。所以似乎同步加载了依赖项。
答案 2 :(得分:0)
看起来在开发过程中使用了同步变体:
require('foo')
执行同步加载,require('foo', function(foo){ … })
执行异步加载。在开发中我们使用同步加载(方便是唯一的原因) - 在生产中,RequireJS Optimizer内联需要调用...
来源:https://github.com/rodneyrehm/viewport-units-buggyfill/issues/18#issuecomment-55604581