commonjs规范
- 每个js文件都是一个模块
- 模块的导出 module.exports
- 模块的导入require
require的执行步骤
-
调用require时会内部调用Module._load方法;
-
Module.resolveFilename 解析文件名,这一步会尝试给文件加上后缀;
const filename = Module._resolveFilename(request, parent, isMain);
-
创建当前模块实例,new Module() => {id,exports};
const module = cachedModule || new Module(filename, parent); function Module(id = '', parent) { this.id = id; this.path = path.dirname(id); this.exports = { }; moduleParentCache.set(this, parent); updateChildren(parent, this, false); this.filename = null; this.loaded = false; this.children = []; }
-
调用module.load加载文件
-
根据文件后缀调用相应的方法进行加载,这里使用了策略模
-