nodeco模块源码(node原生模块)
本文目录一览:
怎么阅读node.js 模块的源代码
Node.js的初始化调用链是这样的, main - Start - CreateEnvironment - Load,
在Start过程中启用了event loop
int Start(int argc, char** argv) {
...
Locker locker(node_isolate);
Environment* env =
CreateEnvironment(node_isolate, argc, argv, exec_argc, exec_argv);
// This Context::Scope is here so EnableDebug() can look up the current
// environment with Environment::GetCurrentChecked().
// TODO(bnoordhuis) Reorder the debugger initialization logic so it can
// be removed.
Context::Scope context_scope(env-context());
* uv_run(env-event_loop(), UV_RUN_DEFAULT);
EmitExit(env);
RunAtExit(env);
env-Dispose();
env = NULL;
...
}
在node:Load加载了node.js, node.js负责初始化Node.js, 包括初始化全局变量和函数, 如setTimeout, nextTick等.
Node.js模块
Node.js中, 模块是通过require来加载的, 而其背后的实现在src/node.js中.
NativeModule.require首先检测模块是否在缓存中(已经被require的模块就会缓存), 如果没有则读取该模块文件内容, 并在当前上下文中执行.
读取模块文件内容使用NativeModule._sources,
NativeModule.getSource = function(id) {
return NativeModule._source[id];
}
而NativeModule._sources是通过process.binding获取的
NativeModule._source = process.binding('natives');
和读取模块内容一样, 在当前上下文执行代码最终也是通过process.binding获取背后的黑盒来实现的.
node.js 怎么阅读模块的源代码
node_modules文件夹中放的是使用npm安装的模块,一般模块中都有一个index.js的文件,这个是模块的启动文件,如果没有,可以看一下模块中的package.json文件,里面的main字段保存的是启动文件名。
nodejs模块源码能直接使用吗
可以。
NodeJS 定义了一个 node_modules 目录。例如某个的绝对路径是 /home/user/hello.js,在该中使用 require('foo/bar') 方式加载时,则 NodeJS 依次尝试使用以下路径。
/home/user/node_modules/foo/bar
/home/node_modules/foo/bar
/node_modules/foo/bar
....
以上部分代码示例。