Node 模块系统


Native 模块由 process.binding 引入,process 应该是由 v8 的 API 引入的(1234

Node.js的模块系统文档可知,在使用 require() 来加载模块后,相关的文件内容会被缓存到 require.cache[filename] 中,当再次 require() 此文件的时候并不会重新加载。所以要想在不重启进程的情况下重新加载模块,我们就要清理这个模块相关的所有缓存

加载模块时,就会执行整个脚本,然后在内存生成一个对象。该对象的 id 属性是模块名,exports属性是模块输出的各个接口,loaded 属性是一个布尔值,表示该模块的脚本是否执行完毕。以后需要用到这个模块的时候,就会到exports属性上面取值。即使再次执行 require 命令,也不会再次执行该模块,而是到缓存之中取值。

CommonJS 模块的重要特性是加载时执行,即脚本代码在 require 的时候,就会全部执行。

CommonJS 的做法是,一旦出现某个模块被"循环加载"(没有执行完就被其他模块加载),就只输出已经执行的部分,还未执行的部分不会输出。依赖模块执行完毕继续执行后面的部分