我们来看张图, 看node与W3C组织、CommonJS组织、ECMAScript之间的关系。
Node借鉴来CommonJS的Modules规范实现了一套非常易用的模块系统,NPM对Packages规范
的完好支持使得Node应用在开发过程中事半功倍。
一、CommonJS 的模块规范
CommonJS中的大部分规范涵盖了模块、二进制、Buffer、字符集编码、I/O流、进程环境、文件系统、套接字、单元测试、Web服务器网关接口、包管理等。
1. 模块引用
模块示例代码如下:
var math = require('math');
在CommonJS规范中,存在require()方法,这个方法接受模块标识,以此引入一个模块的API到当前上下文中。
2.模块定义
在模块中,上下文提供require()方法引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。
例如:
// math.js exports.add = function () { var sum = 0, i = 0, args = arguments, l = args.length; while (i < l) { sum += args[i++]; } return sum; }; // program.js var math = require('math'); exports.increment = function (val) { return math.add(val, 1); };
3.模块标识
简单理解就是传递给require()方法的参数,必须使用小驼峰命名的字符串,或者使用相对路径,亦可使用绝对路径。
Tip: 可以没有.js文件名后缀。
CommonJS导出和引入机制,我们不需要考虑变量污染、命名空间等。
二、Node的模块实现
在Node中引入模块,要经历3个步骤:
(1) 路径引入
(2) 文件定位
(3) 编译执行
Node模块分两种,一种是Node提供的模块,称为核心模块;
欢迎关注公众号,进一步技术交流: