node中模块引用原理

Node基于commonJS规范实现模块引用机制

1、模块定义:

    一个文件一个模块,module.exports.funcName定义当前模块对外可用的function

    示例:test.js文件

    function testFunc(info){

        return "info:"+info;

    }

    module.exports.t = testFunc;

    index.js

    let m = require('./test');//index.js test.js同一文件夹

    console.error(m.t("node模块学习"));

2、模块引用:用require('模块标识符'),将模块的api引入到当前上下文中

    示例:  let math require('math');

3、require引用模块三步骤:

    1)、路径分析

    2)、文件定位

    3)、编译执行:编译成功后的模块会将其文件路径作为索引缓存在Module._cache对象上,

    模块路径,node在模块文件定位时的策略,当前目录node_modules -> 父目录下node_modules ->再上级目录下node_modules -----  ->直至根目录下的node_modules

    模块分核心模块、路径形式模块、用户自定义模块(非路径形式),不同类型模块require引用过程不同见下

    核心模块:node进程启动时,部分核心模块已加载进内存,引入时,路径分析优先判断,文件定位、编译执行两步省略,加载速度最快

    路径形式模块:按路径定位文件并编译执行,编译执行后的结果放内存中,加载速度次之(相对核心模块)

    用户自定义模块:require(test)--> 按照模块路径(见上)依次查找(test.js,test.json,test.node,)文件  -->文件找不到可找到同名目录test,此时node会将test目录当做包处理 --> 在test目录中找package.json文件,解析json中main属性定位文件 -->main属性错误则找test目录下的index文件(index.js,index.json,index.node);

猜你喜欢

转载自blog.csdn.net/qishi123910/article/details/80252905
今日推荐