我正在学习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()设置路径。我想我在这里遗漏了一些东西。谁能指出我正确的方向?
答案 0 :(得分:2)
这是对jquery完成的AMD注册的限制。它显式注册为一个名为'jquery'的命名模块,因此你必须为它配置一个路径配置,或者在上面的例子中,将baseUrl设置为'lib'然后你不需要路径配置。
其他库通常应该使用匿名模块注册,因此您不需要为每个库执行路径配置。 More details here
此外,某些库(如下划线)不直接调用define(),但您可以使用shim config获得一定程度的支持。
答案 1 :(得分:1)
更新以反映评论和James' answer:
你有两个问题:
jQuery,由于James在答案中提出的要求,要求您在配置中设置paths
,或者在您列出的代码中设置baseUrl
“lib”。
您必须记住,您不能只使用RequireJS加载任何旧脚本。只能加载符合AMD标准的脚本。
话虽如此,我建议你改用require-jquery。
您可能最终会使用jQuery插件来假设jQuery已加载到页面上,而这些插件将无法使用您正在尝试的方法。