CommonJS简介及模块标准

来源:互联网 发布:v meca mt2软件 编辑:程序博客网 时间:2024/05/02 21:27

JavaScript早期主要用于基于浏览器的应用,随着NodeJS的应用,JavaScript被大量应用于服务端应用。但因为客户端和服务端的不同,需要写多份不同的代码以适应客户端和服务端的不同。

CommonJS是一种思想,它的终极目标是使应用程序开发者根据CommonJS API编写的JavaScript应用可以在不同的JavaScript解析器和HOST环境上运行。目前,有四大平台支持CommonJS API:Rhino、Spidermonkey、v8、JavaScriptCore。

如果你写的JavaScript是根据CommonJS API编写的,那么,你就可以在与CommonJS兼容的系统上,用JavaScript做下面这些事情:

  • 编写服务端应用;
  • 编写命令行工具;
  • 编写基于GUI的桌面应用;
  • 混合应用程序;

模块

模块上下文

require

每个模块中有一个自由变量require,它是一个方法,这个方法接受一个参数,即模块的唯一ID。

require根据外部模块ID,返回该模块输出的API。如果外部模块被required的时候还没有执行完,require至少应改返回该模块的exports(另一个自由变量)。如果必需的模块不存在,require方法应该抛出一个异常。

require可以有一个main属性,属性值要么为undefined,要么等于module(另一个自由变量),这个属性应当是只读的。

require可以有一个paths属性,属性值为由路径字符串组成的数组,路径按优先级从高到低的顺序排列。

exports

每个模块中还有一个自由变量exports,它是一个对象,模块对外输出的API就绑定在这个对象上。而且exports是模块对外输出API的唯一途径。

module

每个模块中必须有一个自由变量module,它是对象。这个对象有一个id属性,表示该模块的id,同时应该是只读属性。

module对象可以有一个uri属性,表示这个模块被加载的来源。

模块ID

模块ID是由"\"分开的词组成,每个词必须使用驼峰式,或者是"."或".."。熟悉路径的同学应该知道"."表示当前路径,".."表示上一级路径。在这里,"."表示当前模块,".."表示上一级模块。

格式举例:parentModuleA\parentModuleB\ModuleID。

模块ID中可以出现".js"文件后缀。

1 0
原创粉丝点击