关于RequireJS的问题
我读了一些关于RequireJS的文章,我明白了它想要实现的目标。不过,有些事情我还不清楚,也许你们可以解释一下。我将列出问题,使其更具可读性:关于RequireJS的问题,requirejs,amd,Requirejs,Amd,我读了一些关于RequireJS的文章,我明白了它想要实现的目标。不过,有些事情我还不清楚,也许你们可以解释一下。我将列出问题,使其更具可读性: RequireJS是AMD的实现还是在其下使用AMD?AMD对我来说是一个不清楚的问题。据我所知,它是一个API规范,那么它是实现的吗?即使没有像RequireJS这样的模块加载器,你也能使用AMD吗?或者它只是一个规范 我已经多次看到此代码: if ( typeof define === "function" && define.am
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}
require(["mustache", "text!template.html"],
function(mustache, html) {...}
C、Python、Ruby等编程语言都有在自包含、可重用模块中编写代码的机制。JavaScript语言没有这样的特性。嗯,除了在网页上包含多个
标记之外,由于各种原因,这不是一个很好的选择。现在,如果要向JS添加模块特性,需要:1。以商定的模块格式2编写所有JS代码。一种运行时或编译时库,能够以该格式加载或预处理模块。换句话说:JS+模块API+模块API库=带模块的JS。AMD是模块API。RequireJS是模块API库
AMD的基本目标是定义用于编写JavaScript模块的标准API,RequireJS是AMD的一个实现。
AMDAPI本质上是一个单一的函数:define
。编写AMD模块时,假定此函数已分配给全局变量define
。因为JS没有内置的模块特性,所以您唯一的选择就是依赖于这样一个函数的存在,就像您编写浏览器代码时期望document
和location
等变量存在一样。通过将模块依赖项的标识符和用于定义模块的代码传递给define
,可以定义AMD模块define
被重载,以便以页面上介绍的各种格式接收此信息
现在,我们已经掌握了一些基本知识:
define
的全局函数,那么您可以使用AMD(有时使用define.AMD
属性将其与可能使用define
函数的其他模块API区分开来)。类似地,如果您看到有一个全局模块
变量,那么可以使用CommonJS。许多脚本将全局变量分配给窗口
,作为回退胡子
。另一个是文本!template.html
,它是一种伪模块,通过将文本
插件应用于文件template.html
而形成。其效果与您导入的常规AMD模块相同,该模块将template.html
的内容导出为字符串窗口
。为了导入这种AMD风格的脚本,您需要修改其源代码以符合AMDAPI。RequireJS的垫片功能会自动为您实现这一点