Node.js学习教程的模块模块
前言
采用Commonjs规范,模块通过module.exports和require进行导出和导入。模块加载机制采用延迟加载策略。也就是说,系统模块只有在使用时才会被加载,加载完成后才会被放入binding_cache。
分类(模块类型)
系统模件
核心模块(原生模块)、http、缓冲区、fs等。以及底层调用的内置模块(c/c);C/C模块(内置内置模块),由本机模块调用;第三方模块
第三方维护的模块,如express、koa、moment.js等。本地维护的模块(路径形式的文件模块),例如以。/;文件格式
JavaScript模块,module.js;Json模块,module.json;的编译扩展。节点和模块。装载机构
装载步骤
经过路径分析、文件定位和编译执行。
装载订单
系统缓存,一个模块执行后会被缓存,提高重装速度;系统模块,即原生模块,部分核心模块已经编译成二进制,省略了路径分析和文件定位,将直接加载到内存中,其中系统模块定义在源代码的lib目录中;文件模块,从.和/,将尝试根据补充扩展。js,json和。节点(扩展名不添加到文件中),最好添加文件的扩展名。加载过程中找不到目录模块和文件模块,但如果找到相同的目录名称,该目录将被视为一个包。这一块采用了Commonjs规范,可以在文件package.json中找到;节点模块模块。如果系统模块和路径文件模块都找不到,Node.js将从当前模块的父目录搜索到系统的根目录。
关于缓存问题
模块缓存后,您可以通过require.cache查看缓存的模块
//模块文件require . module . js module . exports={ name : ' pr ',say(){ } }//引用了模块文件require.cache.jsrequire('。/require . module ');console . log(' require . cache-');console . log(require . cache);
对象引用
1.1 .导出和模块导出之间的关系
const exports=module.exports所以你不能改变出口的方向,你可以
出口。info={name:' pr ',age: 30}模块。导出={name:' pr ',age: 30}模块循环引用
moduleA.js和moduleB.js这两个模块互相引用,会发生什么?
//moduleA . jsconsole . log(' moduleA ');exports.name=' moduleA name年龄=27岁;const moduleB=require('。/Moduleb . js ');console.log('moduleA需要moduleB=',moduleB . name);//moduleB . jsconsole . log(' moduleB ');exports.name=' moduleB nameconst moduleA=require('。/Modulea . js ');console.log('moduleB需要moduleA=',moduleA . name);
启动模块节点moduleA.js,启动模块moduleA会被打印出来。在moduleA.js模块中加载moduleB.js,打印moduleB;模块moduleA.js加载在模块moduleA.js中,此时模块moduleA.js还没有执行,模块modulea.js的导出对象返回给模块moduleB.js:加载moduleB.js模块后,其中一个模块中装载了全局变量age,因此可以打印出来。最后,将moduleB.js模块的导出对象给moduleA.js模块;有趣的是,在执行代码之前,执行代码段将被包装器封装
(函数(exports,require,module,__filename,__dirname) { //某物});这段代码是Github
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。
版权声明:Node.js学习教程的模块模块是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。