我有一个使用requirejs的最简单的项目。数据主文件为 js / default.js
你可以看到两个jQuery文件。 RequireJS只能看到与 default.js 位于同一级别的内容所以此代码:
require(
['jquery', 'modules/module1', 'modules/module2'],
function($, Module1, Module2){
$('body')
.append(Module1.phrase)
.append('<hr/>')
.append(Module2.ask);
}
);
...作品
但如果我将 ['jquery',... 更改为 ['libs / jquery',... ,则会显示错误:
Uncaught TypeError: $ is not a function
这里有什么问题? 整个代码在这里:http://plnkr.co/edit/QuFsKN597RD873MOlUw8?p=preview
答案 0 :(得分:2)
jQuery必须确实需要jquery
。
现在,模块名称可能仍然存在混淆。有人可能会查看依赖项libs/jquery
并推断jQuery 实际上需要jquery
。也就是说,执行require(['libs/jquery'], ...
会要求RequireJS加载jquery
中的模块libs/
。但是,不是这种情况。所需模块的模块名称是依赖项列表中列出的整个名称。因此,在上面的require
调用中,所需模块的模块名称为libs/jquery
。但是jQuery调用define('jquery', ...
将自己声明为RequireJS。模块名称(第一个参数是jquery
,而不是libs/jquery
,因此RequireJS无法找到所请求的模块。
一个简单的解决方法是添加paths
配置:
paths: {
jquery: 'libs/jquery'
}
答案 1 :(得分:1)
请查看requirejs文档:
jQuery定义命名的AMD模块&#39; jquery&#39; (全部小写)当它检测到AMD / RequireJS时。为减少混淆,我们建议使用&#39; jquery&#39;作为requirejs.config中的模块名称。