CommonJS 模块规范 1.1.1
本规范致力于描述一类可以同时适用于客户端和服务器端的模块系统。该系统中的模块拥有自己的作用域,可以从其他模块导入单例对象,或者对外提供 API。
Require
require 是一个函数对象。
- require 函数接受一个称为模块标识符的参数。
- require 函数返回外部模块提供的 API。
- 当发生循环依赖时,一个外部模块被其依赖模块导入时,它可能未被完全执行。在此种情况下,当前模块调用 require 函数所返回的对象必须包含该外部模块已经准备好的输出物。
- 如果不能返回所请求的模块,则 require 函数应该抛出异常。
- require 函数可以有一个 main 属性。
- 当属性 main 存在,它应该是只读的且不能删除。
- main 属性应该是 undefined,或是已加载模块的 module 对象。
- require 函数可以有一个 paths 属性,该属性是一个具有优先秩序的路径数组,优先级从高到低,路径一直回溯到顶级模块目录。
- paths 属性不应存在于沙盒中。
- 所有模块中的 paths 属性应该一致。
- 使用另一个对象替换 paths 对象是无效的。
- 如果 paths 属性存在,修改 paths 内容会对模块搜索行为产生影响。
- 如果 paths 属性存在,它所包含的路径可能不是全部的搜索路径。因为加载器可以能会在搜索 paths 提供的路径之前或之后去检查其它的路径。
- 如果 paths 属性存在,加载器责任去解析、标准化、规范化路径。
模块上下文
- 一个模块中只有一个自由变量 require,该变量符合以上对 require 函数的定义。
- 一个模块中只有一个自由变量 exports,当模块被执行时,该模块对外提供的 API 被添加到该 exports 对象上。
- 模块必须使用 exports 对象作为唯一的输出手段。
- 一个模块中应该包含一个自由变量 module,该变量是一个 Object 对象。
- module 对象应该拥有一个 id 属性,它是模块的顶级属性。当执行 require(module.id) 时,返回 module.id 所属模块的输出对象。如果该属性被实现,则它应该是一个只读属性,不能删除。
- module 对象可以有一个 uri 属性,该属性指向模块源文件。uri 属性不应存在于沙盒中。
模块标识符
- 模块标识符是一个由多个词汇组成的字符串,不同词汇之间使用正斜杠分隔。
- 单个词汇应该是驼峰标识符,
.或..。 - 模块标识符不能包含文件后缀名,例如
.js。 - 模块标识符可以是相对的,也可以是顶级的。如果标识符首个单词是
.或..,那么该标识符就是相对的。 - 顶级标识符是相对于所谓根命名空间而言。
- 相对标识符是相对于 require 函数所处的模块而言。
未说明
本规范有以下重要点未说明:
- 模块是否存储于数据库、文件系统或工厂函数中,又或者可以和链接库进行互换。
- 模块加载器是否支持使用 PATH 环境变量来解析模块标识符。
PS:本规范从 CommonJS 官方英文版本转译而来,斜体部分表示译文存在商榷。
Ref:
CommonJS 模块规范 1.1.1的更多相关文章
- CommonJs模块规范
1.什么是模块化 文件作用域 通信规则 加载 require 导出 exports 2.CommonJs模块规范 在Node中的Javascript还有一个很重要的概念:模块概念 模块作用域 使用re ...
- NodeJs的CommonJS模块规范
前言 本人记忆力一般,为了让自己理解<深入浅出Node.js-朴灵>一书,会在博客里记录一些关键知识,以后忘了也可以在这里找到,快速回想起来 Node通过require.exports.m ...
- "浏览器端" 使用 commonjs 模块规范开发网页应用,像开发 node 那样开发网页应用
Containjs 1.0 Containjs 是什么? Containjs 是一个基于 Commonjs 模块管理规范的 浏览器端 的 JavaScript 模块加载器(目前为非标准的,代码会持续迭 ...
- commonJS模块规范 和 es6模块规范 区别
ES6 模块与 CommonJS 模块的差异 CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用. CommonJS 模块是运行时加载,ES6 模块是编译时输出接口. Commo ...
- 理解CommonJS ,AMD ,CMD, 模块规范
参考 : https://blog.csdn.net/xcymorningsun/article/details/52709608 1.CommonJS 模块规范 (同步加载模块): var math ...
- CommonJs模块化(nodejs模块规范)
1.概述: Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 如果想在多个 ...
- Node.js实战项目学习系列(3) CommonJS 模块化规范
前言 想开始编写Node.js代码,那么我们就必须先熟悉它的模块化规范CommonJS,本文将详细讲解CommonJS规范 本文代码 >>> github 地址 CommonJS N ...
- Node基础-CommonJS模块化规范
1.在本地项目中基于NPM/YARN安装第三方模块 第一步:在本地项目中创建一个"package.json"的文件 作用:把当前项目所有依赖的第三方模块信息(包含:模块名称以及版本 ...
- 浅析JS中的模块规范(CommonJS,AMD,CMD)
如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧,这些规范到底是啥东西,干嘛的. 一.CommonJS ...
随机推荐
- Dash
作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...
- ucos操作系统的内核有哪些调度方法
1)时间片轮番调度法 假设系统中有5个任务,T1,T2,T3,T4,T5,这个时候,操作系统为每一个任务分配时间,比如说我们为T1任务分配10毫秒,为T2任务分配20毫秒,为T3任务分配5毫秒,为T4 ...
- 27Where条件筛选数据-简单(必学)-天轰穿sqlserver视频教程
大纲:简单条件查询 模糊查询 复合条件 使用IN子句 BETWEEN子句 空值与非空值 优酷地址 代码下载地址 http://www.cnthc.com/?/article/160
- 小白学数据分析----->DNU/DAU
行业指标观察分析-DNU/DAU 写在分析之前 一直以来,我们对于数据都是在做加法,也希望这个过程中,不断搜罗和变换出来更多的数据指标,维度等等.而在实际的分析中,我们发现,一如我们给用户提供产品一样 ...
- iOS 9 failed for URL: "XXX://@" - error: "This app is not allowed to query for scheme XXX" iOS 从APP里启动另一APP
iOS 从C APP里启动 D APP 首先在D APP里设置 URL Schemes 在info.plist 文件里添加URL Schemes URL Types -->item0 --> ...
- Facebook is Hiring!
I am a software engineer in Facebook. I joined Facebook a year ago and now doing some iOS stuff. If ...
- 解决POI读取Excel如何判断行是不是为空
在作Excel表导入数据库的时候要统计成功导入了多少条,失败了多少条. 问题一:Excel表里有225行,只有3行是有数据的,但是我在读Excel表的时候它连没有数据的行也读进来了. 问题二:如果你是 ...
- IntelliJ IDEA 2016.2.4 最新版激活方法
新版激活方法: 1.在线激活 2016年7月14日 更新: 该域名已无法激活,参见2016.2 的搭建授权服务器激活, 菜单help >>>> Register 选择Licen ...
- 【原】MyEclipse8.5集成Tomcat7时启动错误:Exception in thread “main” java.lang.NoClassDefFoundError
解决方法: MyEclipse->Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 6.x->L ...
- 理解 python metaclass使用技巧与应用场景分析
理解python metaclass使用技巧与应用场景分析 参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...