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