我正在尝试使用像杏仁一样使用某些模块来使用:
<script>
requirejs.config({
shim: {
'jQuery': { exports: 'jQuery' },
//etc.
</script>
因为某些脚本已经包含在内。但是,这段代码:
require(['jQuery', function($) {
});
导致“未定义缺少jQuery”。如果我像这样shim jQuery:
define('jQuery', function() {
return jQuery;
});
它有效。
我根本没有构建我的JS,只是将almond.js放到现有的Web软件中,这样我就可以用AMD开发我的新组件了。我想为我的新模块填充现有的全局变量。
我猜测垫片只能在构建时解决,并且构建完全正如我上面所做的那样,这是正确的吗?
答案 0 :(得分:1)
jQuery的名称被硬编码为&#34; jquery&#34;。如果你偏离这个,你就会遇到麻烦。但那不是你唯一的问题。
使用shim
与使用模块名称调用define
不同。当你在问题中使用shim
时,告诉加载器存在一个名为jQuery
的模块,并且一旦加载了该模块,RequireJS应该返回模块值是变量jQuery
的值。强调文本很重要:加载器将获取并加载名为jQuery
的模块。
您在问题中显示的define
通常会与调用require.config
一起放在一起,就在它之前或之后。这声明了一个名为jQuery
的模块。因为模块已经那里,当加载器需要获取此模块时,没有任何东西可以获取。对于杏仁来说,这是一个重要的区别。
杏仁有restrictions,其中一个是:
将所有模块优化为一个文件 - 无动态代码加载。
(强调补充说。)使用我在这个答案中使用的术语,这意味着&#34;没有抓取&#34;。当您使用define
电话时,您没事。当您使用shim
,然后,除非您将模块优化为一个文件,加载程序必须尝试获取模块。杏仁不能这样做。