使用杏仁的shim配置

时间:2015-05-04 08:15:26

标签: javascript requirejs amd almond

我正在尝试使用像杏仁一样使用某些模块来使用:

<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开发我的新组件了。我想为我的新模块填充现有的全局变量。

我猜测垫片只能在构建时解决,并且构建完全正如我上面所做的那样,这是正确的吗?

1 个答案:

答案 0 :(得分:1)

jQuery的名称被硬编码为&#34; jquery&#34;。如果你偏离这个,你就会遇到麻烦。但那不是你唯一的问题。

使用shim与使用模块名称调用define不同。当你在问题中使用shim时,告诉加载器存在一个名为jQuery的模块,并且一旦加载了该模块,RequireJS应该返回模块值是变量jQuery的值。强调文本很重要:加载器将获取并加载名为jQuery的模块。

您在问题中显示的define通常会与调用require.config一起放在一起,就在它之前或之后。这声明了一个名为jQuery的模块。因为模块已经那里,当加载器需要获取此模块时,没有任何东西可以获取。对于杏仁来说,这是一个重要的区别。

杏仁有restrictions,其中一个是:

  

将所有模块优化为一个文件 - 无动态代码加载。

(强调补充说。)使用我在这个答案中使用的术语,这意味着&#34;没有抓取&#34;。当您使用define电话时,您没事。当您使用shim,然后,除非您将模块优化为一个文件,加载程序必须尝试获取模块。杏仁不能这样做。