结构即模块,按照结构划分进行程序开发的过程,就是模块化开发的过程。
CommonJS 是一种代码规范,最初应用于浏览器之外的场景,并且当时命名为ServerJS,后改名为CommonJS,也会简称其为CJS。
Node 中对 CommonJS 进行了支持和实现。
模块化的核心功能即是隔离、导出和导入,Node 对其进行了实现。
观察 step01 - step04 代码变化
// step01 let obj = { name: "huaqi"; age: 18; }; console.log(obj.name); // huaqi // step02 let info = obj; console.log(info.name); // huaqi // step03 obj.name = "花七"; console.log(obj.name); // 花七 console.log(info.name); // 花七 // step04 info.name = "florescence"; console.log(info.name); // florescence console.log(obj.name); // florescence
以上结果原因图解:
Node 中实现 CommonJS 的 exports 和 require 的本质即是引用赋值。
此时 bar 对象是 exports 对象的引用赋值。
引用赋值亦可称之为浅拷贝。
而 exports 对象可以实现导出的原因是 Node 源码中含有以下操作:
module.exports = exports
即 module.exports 为 exports 对象的引用。而 require 实际上是 module.exports 的引用。
图例:
注:exports 对象存在的意义:CommonJS 规范中要求使用 exports 关键字进行导出。
代码验证:
exports.name = "huaqi"; exports.age = 18; exports = 3; console.log(module); console.log(exports);
过程图解: