我不明白require.js如何处理加载路径。每次定义模块时是否需要使用require.config?

时间:2012-08-01 02:40:44

标签: javascript amd

我正在学习require.js,并认为我只是遗漏了一些东西。我不明白它是如何加载文件的。

我的jquery文件位于lib目录中。

这不起作用:

它显示正在Chrome网络面板中加载jquery。错误是:未捕获TypeError:undefined不是函数。所以基本上说$是未定义的。

require(['lib/jquery'],function($) {
  $(document).ready(function(){
    alert('hello');
  });
});

这有效:

require.config({
    paths: {
        jquery: 'lib/jquery'
    }
});


require(['jquery'],function($) {
      $(document).ready(function(){
      alert('hello');
    });

});

在其他示例中,我在网上看到您不必使用require.config设置路径。每次我想定义一个模块时,我是否必须这样做?我知道我在使用require而不是在这种情况下定义,但我对define方法有同样的问题。每次使用define创建模块时,我都必须使用require.config()设置路径。我想我在这里遗漏了一些东西。谁能指出我正确的方向?

2 个答案:

答案 0 :(得分:2)

这是对jquery完成的AMD注册的限制。它显式注册为一个名为'jquery'的命名模块,因此你必须为它配置一个路径配置,或者在上面的例子中,将baseUrl设置为'lib'然后你不需要路径配置。

其他库通常应该使用匿名模块注册,因此您不需要为每个库执行路径配置。 More details here

此外,某些库(如下划线)不直接调用define(),但您可以使用shim config获得一定程度的支持。

答案 1 :(得分:1)

更新以反映评论和James' answer

你有两个问题:

  1. jQuery,由于James在答案中提出的要求,要求您在配置中设置paths,或者在您列出的代码中设置baseUrl “lib”。

  2. 您必须记住,您不能只使用RequireJS加载任何旧脚本。只能加载符合AMD标准的脚本。

  3. 话虽如此,我建议你改用require-jquery

    您可能最终会使用jQuery插件来假设jQuery已加载到页面上,而这些插件将无法使用您正在尝试的方法。