在Node中,每个文件模块都是一个对象,它的定义如下:
function Module(id, parent) {
this.id = id;
this.exports = {};
this.parent = parent;
if (parent && parent.children) {
parent.children.push(this);
}
this.filename = null;
this.loaded = false;
this.children = [];
}
编译和执行是引入文件模块的最后一个阶段。定位到具体的文件后,Node会新建一个模块对象,然后根据路径载入并编译。对于不同的文件扩展名,其载入方法也有所不同,具体如下所示。
.js
文件。通过 fs 模块同步读取文件后编译执行。 .node
文件。这是用C/C++编写的扩展文件,通过 dlopen()
方法加载最后编译生成 的文件。 .json
文件。通过 fs 模块同步读取文件后,用 JSON.parse()
解析返回结果。其余扩展名文件。它们都被当做.js文件载入。