simplied commonJS包装器如何在require.js下工作?

时间:2016-01-07 17:03:25

标签: javascript requirejs commonjs

从他们的网站上看这个例子

define(function (require) {
    var foo = require('foo');

    //Define this module as exporting a function
    return function () {
        foo.doSomething();
    };
});

我的问题是,' foo'是异步加载的,它下面的Javscript如何在加载之前不执行?

1 个答案:

答案 0 :(得分:2)

http://requirejs.org/docs/api.html#cjsmodulehttp://requirejs.org/docs/whyamd.html#sugar中解释了这一点。

Require.js将在某个时刻(在运行函数之前)查看函数的字符串表示,找到所有require调用以确定依赖关系并加载它们。

  

为了简化这一过程,并简单地围绕CommonJS模块进行简单包装,支持这种形式的定义,有时也称为“简化的CommonJS包装”:

define(function (require) {
    var dependency1 = require('dependency1'),
        dependency2 = require('dependency2'); 
    return function () {};
});
     

AMD加载程序将使用require('')解析Function.prototype.toString()个调用,然后在内部将上面的定义调用转换为:

define(['require', 'dependency1', 'dependency2'], function (require) {
    var dependency1 = require('dependency1'),
        dependency2 = require('dependency2');
    return function () {};
});
     

这允许加载器异步加载dependency1dependency2,执行这些依赖项,然后执行此函数。