0

我正在尝试填充某些模块以与杏仁一起使用,如下所示:

<script>
requirejs.config({
  shim: {
    'jQuery': { exports: 'jQuery' },
  //etc.
</script>

因为某些脚本已经包含在内。但是,这段代码:

require(['jQuery', function($) {

});

导致“未定义的缺少 jQuery”。如果我像这样填充 jQuery:

define('jQuery', function() {
  return jQuery;
});

有用。

我根本没有构建我的 JS,只是将 almond.js 放到现有的 Web 软件中,这样我就可以使用 AMD 开发我的新组件。我想为我的新模块填充现有的全局变量。

我猜垫片只在构建时解决,并且构建完全按照我上面所做的那样,对吗?

4

1 回答 1

1

jQuery 的名称被硬编码为“jquery”。如果你偏离这一点,你就会遇到麻烦。但这不是你唯一的问题。

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

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

杏仁有限制,其中之一是:

将所有模块优化到一个文件中——无需动态代码加载。

(添加了重点。)使用我在此答案中使用的术语,这意味着“不获取”。当你使用你的define电话时,你很好。当您使用 时shim除非您将模块优化为一个文件,否则加载程序必须尝试获取模块。杏仁不能那样做。

于 2015-05-04T10:44:37.573 回答