在node中模块中,上下文提供require()方法来引入外部模块:

var test=require('./index.js');

在require中传入模块标识,其实就是参数,可以 . 、 .. 开头的相对路径,或者绝对路径,也可以是文件夹。

在node中,模块分为两类:一类是node提供的模块,为核心模块,另一类是用户编写的模块,为文件模块。

在node中引入模块,需要经历三个过程:

1.路径分析

2.文件定位

3.编译执行

核心模块加载只需要经历路径分析,因为在node进程启动的时候,部分核心模块已经加载进内存中。

node中也有缓存加载,node对引用过的模块都会进行缓存,浏览器缓存的是文件,node缓存的是编译和执行后的对象;

在缓存加载机制中,核心模块缓存最先加载,文件模块缓存低于核心模块加载。

文件定位

require在分析标识符中,会出现不包含文件扩展名的情况,这种情况node会按js、json、node的次序补充扩展名,依次尝试。如果尝试没有获取到相对应的文件,却得到一个目录,node也会把这个目录当成一个包来处理。

看下图:require加载文件模块zhang,但是没有指明是zhang文件模块下那个模块。默认是index.js、index.json、index.node

node在目录分析中没有定义成功任何文件,则会进入下一个模块路径进行查找,全部查找完毕木有,则会抛出错误

缓存加载<--核心模块缓存<--文件模块缓存<--核心模块加载<--文件模块加载<--详细路径<--简单目录

Node初学(一)require方法相关推荐

  1. [Node.js] Module.Require机制研究

    最近开始用Node.js写Server端的脚本,由于原来一直在做的.Net中开发理念的影响,在设计上和代码实现上尽可能地进行封装. Node.js中跟.Net中对象最相近的就是Module(模块)了, ...

  2. Node.js 调用 C++ 方法 / C++ Addons 详解

    最近开发涉及到了一些Node.js调用C++的地方,于是网上搜了一下,发现网上好多文章都是比较片面的东西,没法直接使用.于是花点时间总结一下. Android开发中Java 调用C++的部分叫JNI, ...

  3. require 方法详解

    在 NodeJS 中有一个方法是我们使用频率最高的,那就是 require 方法.NodeJs 遵循 CommonJS 规范,该规范的核心是通过 require来加载其他依赖的模块. 几个问题 mod ...

  4. Node.js与Sails~方法拦截器policies

    policies sails的方法拦截器类似于.net mvc里的Filter,即它可以作用在controller的action上,在服务器响应指定action之前,对这个action进行拦截,先执行 ...

  5. ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available 错误解决方法

    ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available 错误解决方法 参考文章: (1)E ...

  6. 【PHP】PHP include()和require()方法的区别

    PHP的include()和require()是两种包含外部文件的方法,对于这两种方法有什么区别,很多初学者可能不是很明白.下面总结一下PHP include()和require()的区别: 1:加载 ...

  7. zabbix node.js mysql_Zabbix添加Node.js监控的方法

    目前网上已有 pm2-zabbix 工具可以实现Zabbix对Node.js的监控报警,Github地址. 特征: 自动发现通过PM2管理的Node.js进程. 报告Nodes.js进程状态.CPU占 ...

  8. Mac 无法运行node命令的解决方法

    Mac 无法运行node命令的解决方法 参考文章: (1)Mac 无法运行node命令的解决方法 (2)https://www.cnblogs.com/allenwuhen/p/6834428.htm ...

  9. Node对象的一些方法

    Node对象是什么提供了 DOM的标准规范提供了Node对象,该对象主要提供了解析DOM节点树结构的属性和方法,DOM树结构主要是依靠节点进行解析,称为DOM节点树结构.Node对象是解析DOM节点树 ...

最新文章

  1. Python学习--not语句
  2. RHEL7.0系列 修改字符终端分辨率
  3. 如何在Mac OS下用ISO包制作启动U盘
  4. XMPP iOS客户端实现三:登录、注册
  5. [收藏] 微软850位顶级人才不做Windows研发
  6. 做人真善美,做事拖后腿
  7. 从前端view到数据访问逻辑的思维导图
  8. IIS站点更改.net版本命令
  9. 文件标准标准IO与文件IO 的区别
  10. 使用ffmpeg获取影片信息
  11. 8.23打架学习一个
  12. Python 每日一题(计算数值和)
  13. 转置矩阵,矩阵的行列式,伴随矩阵,逆矩阵的概念及C#求解
  14. 服务器虚拟化集群部署
  15. 贝叶斯新闻分类实战项目详解
  16. meetsurprise告诉你手镯的戴法
  17. HDMI热插拔原理及信号解析
  18. ff14 人最多的服务器,记录FF14全服人数最少的服务器红茶川
  19. 抖音计算机音乐你要我,抖音你若中意我我就中意你是什么歌 完整版歌曲分享...
  20. 【RA6M4学习RT-Thread相关bug答疑】

热门文章

  1. 社区活跃吗_武汉大江园社区活跃着一支90后志愿者突击队
  2. mysql binlog 恢复 表_MySQL通过Binlog恢复删除的表
  3. mysql whrere 占位_【MySQL】(4)操作数据表中的记录
  4. win7怎么清理java缓存文件夹_Win7怎么清除浏览器缓存?清除电脑缓存的妙招
  5. mysql容器创建命令_centos7下docker创建基本的mysql容器
  6. linux实验磁盘管理,从0到1学习网络安全 【Linux实验篇-LVM 磁盘管理】
  7. 搭建Ubuntu18.04+Anaconda3.x+Pycharm+SimpleITK(三)
  8. 哈利波特 pdf_干货!哈利波特英文原版pdf免费领,(含音频)词汇量大于新概念!...
  9. 乐视手机没有logcat日志_盘点国产品牌手机,联想,魅族,一加有你用过的那款吗?...
  10. python项目主界面_python项目案例