nodejs 启动流程 (以 输入 node app.js 为例)
2021-03-09 15:06:46 0 举报
本流程图大致描述了node启动过程中一些关键模块的加载和实现, 有助于了解整个node底层启动逻辑
作者其他创作
大纲/内容
src/node_binding.cc调用宏: NODE_BUILTIN_MODULES
执行宏V(各种核心模块)
lib/internal/modules/cjs/loader执行 Module.runMain 执行 node命令后面的参数 app.js
node 进程启动时核心模块注册逻辑
lib/internal/modules/cjs/loader里面定义了font color=\"#990000\
loader.js导出了一个requirefont color=\"#33ff33\
loader.js 导出了internalBinding实际是通过 c++ 的 getInternalBinding实现
src/node_binding.ccGetInternalBinding
font color=\"#ff0000\
node 启动时核心模块对应的C++模块加载逻辑
src/node_main_instance.ccRun函数主要做两件事CreateMainEnvironmentLoadEnvironment
src/node_binding.ccFindModule根据模块名从 node module 结构体链表中找到对应的 node module
src/node_binding.hregister_##modname 函数 的内部逻辑调用node_module_register _ 函数
font color=\"#660000\
loader.js导出了一个font color=\"#cc00cc\
src/node.ccStart函数做三件事InitializeOncePerProcess 注册了内建模块uv_loop_configure 设置事件循环配置调用 NodeMainInstance 的 Run 函数
runMain 实际是调用 Module._load
src/node_binding.h调用宏NODE_MODULE_CONTEXT_AWARE_INTERNAL两个参数modname 模块名regfunc 注册函数
src/node_binding.ccInitModule调用找到的node module 结构体的nm_context_register_func 函数
生成一个node module 结构体链表
node 启动逻辑梳理输入node app.js
src/node_binding.h调用宏NODE_MODULE_CONTEXT_AWARE_CPP
定义了 _register_##modname 函数以及一个 node module结构体
src/node_main_instance.ccCreateMainEnvironment 创建JS运行环境关键函数 InitializeContextRuntimeInitializeMainContextRunBootstrapping
src/node.ccBootstrapInternalLoaders设置 font color=\"#660000\
src/env.ccInitializeMainContext调用CreateProperties 设置 进程对象
font color=\"#cc0000\
src/node_binding.cc调用宏 NODE_BUILTIN_STANDARD_MODULES
src/node.ccInitializeNodeWithArgs 初始化函数内部调用binding::RegisterBuiltinModules
src/node.ccRunBootstrapping 执行BootstrapInternalLoaders 函数BootstrapNode 函数
src/node.ccExecuteBootstrapper 函数主要失调用NativeModuleEnv. LookupAndCompile 函数进而调用 NativeModuleLoader.LookupAndCompile 函数
0 条评论
下一页