requirejs看不到jquery

时间:2015-12-05 08:35:17

标签: javascript jquery requirejs amd

我有一个使用requirejs的最简单的项目。数据主文件为 js / default.js

enter image description here

你可以看到两个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

2 个答案:

答案 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中的模块名称。

http://requirejs.org/docs/jquery.html