自定义使用RequireJS require()函数

时间:2013-03-26 07:22:54

标签: javascript requirejs

我想知道为什么我不能使用这样的require()函数:

// I'm using define's sugar syntax
define(function(require) {  

  // This works fine. It assigns myModule to the myModule variable (no callback needed)
  var myModule = require('myModule');

  var getModule = function(name) {

    // This doesn work. Using require() here expects a callback
    return require(name);        
  };

  return getModule;
});

第二次require()调用抛出(但看看DevTools显示实际已加载<name>):

Uncaught Error: Module name <name> has not been loaded yet for context: _ 

为什么第一个require()调用只返回模块(不需要以回调方式执行),但第二个require()调用仅适用于回调?

1 个答案:

答案 0 :(得分:1)

我会在这里跟进我的评论。

如果没有将数组作为第一个参数传递给require,那么除了在传递require的定义回调中之外,你不能使用require('jquery', function() {}); 。即使这有局限性。

尝试在其他地方执行此操作会引发错误:

define(function(require) {
    var $ = require('jquery');
});

http://requirejs.org/docs/errors.html#requireargs

你唯一能做的就是:

define(['jquery'], function($) {

});

这只是一种更好的写作方式:

{{1}}

第一个版本称为糖语法 - http://requirejs.org/docs/whyamd.html#sugar

  

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

我基本上只是重复了在RequireJS文档中解释的内容,但希望这会让它更清晰一些。

我在这里也讨论了这个主题 - How to achieve lazy loading with RequireJS?