CommonJS简介及模块标准
2015-06-03 16:11
405 查看
JavaScript早期主要用于基于浏览器的应用,随着NodeJS的应用,JavaScript被大量应用于服务端应用。但因为客户端和服务端的不同,需要写多份不同的代码以适应客户端和服务端的不同。
CommonJS是一种思想,它的终极目标是使应用程序开发者根据CommonJS API编写的JavaScript应用可以在不同的JavaScript解析器和HOST环境上运行。目前,有四大平台支持CommonJS API:Rhino、Spidermonkey、v8、JavaScriptCore。
如果你写的JavaScript是根据CommonJS API编写的,那么,你就可以在与CommonJS兼容的系统上,用JavaScript做下面这些事情:
编写服务端应用;
编写命令行工具;
编写基于GUI的桌面应用;
混合应用程序;
require根据外部模块ID,返回该模块输出的API。如果外部模块被required的时候还没有执行完,require至少应改返回该模块的exports(另一个自由变量)。如果必需的模块不存在,require方法应该抛出一个异常。
require可以有一个main属性,属性值要么为undefined,要么等于module(另一个自由变量),这个属性应当是只读的。
require可以有一个paths属性,属性值为由路径字符串组成的数组,路径按优先级从高到低的顺序排列。
module对象可以有一个uri属性,表示这个模块被加载的来源。
格式举例:parentModuleA\parentModuleB\ModuleID。
模块ID中可以出现".js"文件后缀。
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"文件后缀。
相关文章推荐
- Ruby中require、load、include、extend的区别介绍
- Node.js中require的工作原理浅析
- PHP Warning: Module 'modulename' already loaded in问题解决办法
- JavaScript的Module模式编程深入分析
- php include和require的区别深入解析
- Javascript模块化编程(三)require.js的用法及功能介绍
- php 中include()与require()的对比
- php中require和require_once的区别说明
- require(),include(),require_once()和include_once()区别
- 从php核心代码分析require和include的区别
- PHP包含文件函数include、include_once、require、require_once区别总结
- PHP中include与require使用方法区别详解
- PHP中require和include路径问题详解
- PHP中include()与require()的区别说明
- 深入理解PHP之require/include顺序 推荐
- Rsync ERROR: auth failed on module解决方法
- Lua中的loadfile、dofile、require详解
- Lua中的模块(module)和包(package)详解
- Perl中use和require用法对比分析
- perl文件包含(do,require,use)指令介绍