2012-08-01 59 views
2

我正在学习require.js,并认为我只是错过了一些东西。我不明白它如何加载文件。我不明白require.js如何处理加载路径。我每次定义模块时都需要使用require.config吗?

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

这不起作用:

这表明,jQuery是加载在Chrome网络面板。错误是:Uncaught 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()来设置路径。我想我在这里错过了一些东西。任何人都可以将我指向正确的方向吗?

回答

1

更新,以反映的意见和James' answer

你有两个问题:

  1. 的jQuery,詹姆斯概述了他的答案的原因,需要你要么paths集在你的配置,或你在你所描述的代码中将baseUrl设置为“lib”。

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

话虽如此,我会建议你使用require-jquery代替。

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

+0

是的,我读到了,但我感到不自在,因为我不确定它从哪里获取jquery以及它抓取的是什么版本。我宁愿自己托管文件。另外,我正在使用其他库,主要是关于如何加载路径的困惑。我有同样的问题加载underscore.js – 2012-08-01 03:51:56

+0

@SpencerCooley RequireJS不支持underscorejs开箱即用。您必须记住RequireJS中无法加载任意脚本。只能使用AMD格式的脚本。有加载下划线的技巧,所以我的猜测是你确实了解如何加载路径,你只是没有尝试加载实际上可以加载的脚本。 – 2012-08-01 03:55:08

+0

我明白你的意思了。我刚刚发现这个https://github.com/amdjs/underscore.git – 2012-08-01 04:01:25

2

这是由jquery完成的AMD注册的约束。它显式注册为一个名为'jquery'的命名模块,所以你必须为它配置一个路径配置,或者在上面的情况下,将baseUrl设置为'lib',那么你不需要路径配置。

其他库通常应该使用匿名模块注册,因此您不需要为每个库执行路径配置。 More details here。另外,一些库,如下划线,不直接调用define(),但可以通过使用shim config来获得一定程度的支持。

+0

感谢您的回复。所以,据我所知,如果一个模块没有指定的模块ID,那么它是匿名的,它可以通过指定路径require(['lib/this','lib/that'])来调用。如果它有一个id,就像jquery那样,那么路径将需要先用require.config来设置 – 2012-08-01 04:55:55

相关问题