Require.js是否具有用于加载单个依赖项的同步版本?

时间:2014-09-15 13:39:07

标签: javascript browser requirejs

...将启用此模式:

var $ = require('jQuery');

我正在查看Require.js docs,而我能看到的只是回调版本,例如require(['jQuery'], function ($) { … });

3 个答案:

答案 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");
});

文档::

https://github.com/jrburke/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define

答案 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