1. CommonJS规范

2. Node 模块实现
核心模块:
node源码中编译生成, 路径分析中优先判断
文件模块:
运行时动态加载, 需要经历路径分析, 文件定位, 编译执行过程; 速度比核心模块慢
路径分析
1. 核心模块
2. 路径形式文件模块
以. .. / 开始的标识符, 被当做文件模块加载
3. 自定义模块
node_modules加载方式, 是所有加载方式中最慢的
文件定位
文件扩展名分析
require 引入模块不包含扩展名, nodejs依次尝试 .js .json .node扩展名
目录分析和包
如果require分析, 没有获取到对应的文件, 但是得到一个目录; node会尝试获取该目录下的package.json读取main属性, 如果获取失败, 则尝试index.js index.json index.node; 如果还是失败, 则会遍历该目录查找目标文件.
编译执行过程
.js 通过fs模块读取后编译执行
.node 通过dlopen方法加载后编译执行
.json 通过JSON.parse()解析后返回结果
其余扩展名 被当做.js文件加载
1. .js模块编译
2. .node编译, C/C++模块编译
3. .json文件编译
3. 核心模块
包括C/C++和js编写组成, C/C++在node项目src目录下, js在node项目lib目录下
1. js核心模块加载过程
转存为C/C++代码
编译js代码
2. C/C++核心模块加载过程


4. C/C++扩展模块
GYP项目生成工具 node-gyp 支持编写跨平台node的C/C++代码
V8引擎C++库 实现js和C++相互调用
libuv库 跨平台库, 实现了时间循环, 文件操作等
Node内部库
其他库 在deps目录下
####1. C/C++扩展模块的编写
####2. C/C++扩展模块的编译
####3. C/C++扩展模块的加载
5. 模块调用栈

6. 包与NPM
包结构: package.json 包描述文件 bin 可执行二进制文件 lib js代码 doc 文档 test 单元测试
7. 前后端公用模块
node是CommonJS实现规范的一种; AMD规范是CommonJS在前端的领域的延伸
AMD规范:
define([id, dependencies], factory/function) id 模块id, 选填 dependencies 依赖, 选填 factory 必填, 模块实现部分
CMD规范
define([‘dependencies1’, …], function(dependencies1, …){ return function(){}; })
CMD与AMD的区别, 主要是定义模块和依赖引入的部分
版本控制
| Version | Action | Time |
|---|---|---|
| 1.0 | Init | 2019-08-19 |