CommonJS 规范
是一套js的代码规范,使js可以开发复杂应用,同时具备跨平台能力
内容:模块必须通过mudule.exports
导出对外的变量或接口,通过require()
来导入外部的模块的输出到当前模块中
特点:
- 所有代码运行进行在当前模块作用域中,不会污染全局作用域
- 模块同步加载,根据代码中出现的顺序依次加载
- 模块可多次加载,但指挥在第一次加载中运行一次,将运行结果缓存,以后加载就直接读取缓存结果,如果要再次执行,必须清除缓存
1. Module
Node内部提供了一个Module构建函数:
function module(id,parent){
this.id=id;
this.exports=exports;
this.parent=parent;
...
}
代码 | 解释 |
---|---|
module.id | 模块的识别符 |
module.filename | 模块的文件名 |
module.loaded | 模块是否已完成加载 |
module.children | 返回一个数组,表示该模块要用到的其他模块 |
module.parent | 返回一个对象,表示调用该模块的模块 |
module.exports | 模块对外输出的值 |
module.paths | 从当前文件目录开始查找nodeles目录,知道根目录 |
2. require
require(’./demo.js’) 用于加载模块文件,返回该模块的exports对象
‘./’:相对路径
‘/’:绝对路径
内部处理流程:
require是CommonJS 规范中,用来加载其他模块的命令,它不是一个全局命令,而是指定当前模块的module.require
命令,而后者又调用node的内部命令module._load
- 清除指定模块的缓存:
delete require cache [module name]
- 删除所有模块的缓存:
object.keys(require.cache).forEach(function(key){
delete require.cache[key]
})
- 判断当前模块是否是直接执行:
require.main===demo