Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
发布日期:2021-07-01 05:47:17
浏览次数:2
分类:技术文章
本文共 2125 字,大约阅读时间需要 7 分钟。
CommonJS Module 规范
CommonJS 的模块化规范描述在 中
目前实现此规格的包有:
,, (0.2), , , , , , ,
注意,这里并没有找到 requireJS,因为它使用的是AMD规范。
此规范定义的具体内容包括:
- Require require是一个function。这个function接收一个模组的标识,返回外部模组的接口。如果有循环依赖的话,因为需要一个传递依赖,外部模组就不会立即执行;in this case, the object returned by "require" must contain at least the exports that the foreign module has prepared before the call to require that led to the current module's execution. 如果请求的模组不能被返回,require需要抛出异常。 require 函数必须有 "main"属性。 必须有"paths" attribute.
- Module Context 在一个模组中,有一个"require"的自由变量。 有一个"exports"的自由变量。 必须有一个"module"的对象变量
- Module Identifiers 模组标识是正斜杠区隔的字符串短语。 短语使用驼峰法,“.”,“..”命名 模块的标识可以是“相对的”或“顶层”的。 顶层标识解决概念性模组的命名 相对标识符被解决相对的标识符模块。
- Unspecified 此规范遗留了一些互操作不确定性的要点: 是否模块需存储数据库,文件系统,工厂功能模块,互换的链接库? 路径是否被模组加载器支持来解决模块标识的问题?
看一下依此规范定义和使用的例子: math.js
exports.add = function() { var sum = 0, i = 0, args = arguments, l = args.length; while (i < l) { sum += args[i++]; } return sum;};increment.js
var add = require('math').add;exports.increment = function(val) { return add(val, 1);};program.js
var inc = require('increment').increment;var a = 1;inc(a); // 2 module.id == "program";注,以上例子并不能实际run, 因为我们没有实现require这个function.
AMD规范
目前实现AMD规范的有: Dojo (1.7)、MooTools (2.0)、Firebug (1.8) , jQuery (1.7) ,RequireJS等 AMD的规范定义在 : AMD API 规范主要包含:
- AMD -引用和定义模块化的JS代码的主要构建块。 define() 函数的定义 -- define(id?, dependencies?, factory); id表示该模块的标识,为可选参数。 dependencies是一个字符串Array,表示该模块依赖的其他所有模块标识,模块依赖必须在真正执行具体的factory方法前解决,这些依赖对象加载执行以后的返回值,可以以默认的顺序作为factory方法的参数。dependencies也是可选参数,当用户不提供该参数时,实现AMD的框架应提供默认值为[“require”,”exports”,“module”]。 factory是一个用于执行改模块的方法,它可以使用前面dependencies里声明的其他依赖模块的返回值作为参数,若该方法有返回值,当该模块被其他模块依赖时,返回值就是该模块的输出。 define.amd property Transporting more than one module at a time 看一个例子:
define("alpha", ["require", "exports", "beta"], function (require, exports, beta) { exports.verb = function() { return beta.verb(); //Or: return require("beta").verb(); } });
- require requrie() 函数的API,允许动态的,异步的加载模块和解决模块ID标识字符串到文件路径的转换。 require(String) require(Array, Function) require.toUrl(String)
- Loader-Plugins 允许加载非传统的JS 依赖项的其他资源。
- Common-Config 可选的常见配置。
转载地址:https://oscar.blog.csdn.net/article/details/8907087 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月22日 17时54分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
在java中使用dom4j解析xml
2019-05-07
web 页面用户名检测
2019-05-07
[数据库设计范式]简明介绍第二范式与第三范式之间的区别
2019-05-07
[java]静态成员变量/静态代码块/非静态代码块执行顺序
2019-05-07
[servlet]web.xml中url-pattern的四种配置方式及其优先级
2019-05-07
[servlet] war项目启动后进入报错 HTTP Status 500 - java.lang.LinkageError: loader constraint violation 解决
2019-05-07
[大数据]大数据体系整理
2019-05-07
python import midi error
2019-05-07
MyBatis模糊查询的sql拼接
2019-05-07
CSS选择器
2019-05-07
eclipse安装aptana插件
2019-05-07
cocos2d-x auto-batching
2019-05-07
cocos-lua 使用plist文件
2019-05-07
gitlab迁移后一直提示413错误
2019-05-07
ElasticSearch查询语句概述
2019-05-07
springboot 数据连接池HikariPool
2019-05-07
基于角色得后台权限管理系统设计(一、表设计)
2019-05-07