2

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

我在 lib 目录中有我的 jquery 文件。

这不起作用:

它显示 jquery 正在加载到 chrome 网络面板中。错误是:Uncaught TypeError: undefined is not a function 。所以基本上是说 $ 是未定义的。

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 方法时遇到了同样的问题。每次我使用define 制作模块时,我都必须使用require.config() 设置路径。我想我在这里遗漏了一些东西。谁能指出我正确的方向?

4

2 回答 2

2

这是对 jquery 完成的 AMD 注册的约束。它显式注册为名为“jquery”的命名模块,因此您必须为其配置路径,或者在上述情况下,将 baseUrl 设置为“lib”,然后您不需要路径配置。

其他库通常应该使用匿名模块注册,因此您不需要为每个库进行路径配置。更多细节在这里

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

于 2012-08-01T04:32:23.950 回答
1

更新以反映评论和詹姆斯的回答

你有两个问题:

  1. 由于詹姆斯在他的回答中概述的原因,jQuery 要求您在配置中进行paths设置,或者在您概述的代码中设置baseUrl为“lib”。

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

话虽如此,我建议您改用require-jquery

您可能最终会使用 jQuery 插件,这些插件会假定 jQuery 已加载到页面上,而这些插件不适用于您尝试的方法。

于 2012-08-01T03:42:05.443 回答