requirejs 看不到 jquery

requirejs can't see jquery

我有一个使用 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

请查看 requirejs 文档:

jQuery defines named AMD module 'jquery' (all lower case) when it detects AMD/RequireJS. To reduce confusion, we recommend using 'jquery' as the module name in your requirejs.config.

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

jQuery 确实必须作为 jquery.

的要求

现在,模块名称可能仍然存在混淆。有人可能会查看依赖项 libs/jquery 并推断 jQuery 实际上需要的 jquery。也就是说,执行 require(['libs/jquery'], ... 将要求 RequireJS 加载位于 libs/ 中的模块 jquery。然而,情况并非如此。所需要的模块的模块名称是依赖列表中列出的全名。所以在上面的require调用中,需要的模块的模块名称是libs/jquery。但是 jQuery 调用 define('jquery', ... 来向 RequireJS 声明自己。模块名称(第一个参数是 jquery,而不是 libs/jquery,因此 RequireJS 无法找到请求的模块。

一个简单的修复是添加一个 paths 配置:

paths: {
    jquery: 'libs/jquery'
}