0

我试图在这里给出文件夹结构。

不同之处在于我使用的是这些库的所有最新开发版本。但是,它们没有正确上传,即使是 jquery。我不明白 AMD 兼容是什么意思。

我只是下载了那些库。这是否意味着它们不兼容 AMD?这些库是否有单独的 AMD 兼容版本?我们是否需要使用 shim 配置来加载非 AMD 兼容?

我害怕使用 shim,因为 require.js 官方文档说不推荐。

4

2 回答 2

2

@kryger 说 jQuery 与 AMD 兼容是对的,并且填充非 AMD 模块没有任何问题

AMD 兼容只是意味着该模块符合AMD 规范;因此它导出了它的功能。例如:

define(['jquery', 'underscore'], function ($, _) {
    // function body
});

所以在上面的函数体中:

  • 您可以通过参数访问 jQuery $;但
  • underscore 不会为 AMD 导出自身,因此_参数将是undefined.

一些与 AMD 兼容的模块(例如 jQuery)也可以“独立”工作,例如在 HTML<script>标记中,它们将导出到全局名称空间(例如window.$)。

我认为$当您通过 AMD 加载器加载 jQuery 时,它仍然会导出全局变量,因此您只需在入口点/第一次需要它时加载 jQuery 并始终访问全局变量$(而不是定义$参数)。

此外,如果你使用 jQuery 插件(它修改了全局插件),它都会变得有点混乱!

于 2013-05-11T13:43:29.930 回答
1

我在文档中找不到shim“不推荐”的任何提及;我不会太担心它。这是一种通过 RequireJS 桥接非 AMD 兼容库的经过充分测试且越来越流行的方法(以前,这样做的唯一方法是构建一个包含在定义调用中的专用 AMD 版本;这给库维护者带来了额外的努力) .

如果“最新开发版本”是指 jQuery 的Pre-Release Builds,它看起来确实支持 AMD(查看下载页面的预发布部分,向下滚动到源代码文件的最底部:您将参见与 AMD 相关的代码)

Backbone并且underscore在任何情况下都需要填充,因为它们与 AMD 无关,所以没有逃避它(这两个特定的库甚至在shim config option documentation example中使用,所以你可以重用它)。

于 2013-05-10T14:54:27.137 回答