Node 模块加载汇总
Nodejs 模块大概可分为4种:
a) builtin module Nodejs中以C++形式提供的文件模块。
b) constant module Nodejs中定义常量的文件模块。
c) native module Nodejs中以javascript形式提供的核心模块。
d) 第三方module 由第三方提供的文件模块。
一、模块加载步骤
1、路径查找
文件查找是先查找当前目录的node_modules,然后查找父目录的node_modules,然后逐级向上查找
2、文件定位
1) 缓存
2) 如果是绝对路径, 则直接按路径读取并编译
3) 如果是“/”则直接从/node_modules目录查找
4) 如果是相对路径, 则生成如下查询规则,
[‘/home/myapp/mydir/node_module‘,‘/home/myapp/node_module‘ ‘/home/node_module‘,‘/node_module‘
]
5) 从上述数组中取出第一个目录作为查找对象, 如果存在结束查找
6) 然后依次尝试添加.js、.json、.node后缀继续查找, 如果存在则结束
7) 尝试将require参数作为一个包查找, 读取目录下的package.json文件, 取得main参数指定的文件
8) 根据指定的文件未找到, 如果没有,执行第6步
9) 如果main参数不存在或者第8步未找到, 则查找该目录下index文件, 如果没有, 执行第6步
10) 如果依然没有找到, 则开始取出数组第二条路径, 然后执行5-7步。 直到数组中最后一个值
11) 如果还没找到, 抛出异常
3、模块编译
编译分为三种情况,js模块、c/c++模块、json模块
4、模块缓存
核心模块编译成功后缓存在NativeModule._cache
下
文件模块编译成功后缓存在Module._cache
下
相关参考
- Nodejs模块载入运行原理
- node.js 中的核心模块 Core Modules 加载顺序及规则
- 深入浅出node.js学习笔记—node模块加载机制
- 深入浅出nodejs(一) 模块加载机制
Node 模块加载汇总相关推荐
- node --- 模块加载机制
1. Node.js中模块加载机制 1.1 模块查找规则-当模块拥有路径但没有后缀时 require('./find.js'); require('./find'); require方法根据模块路径查 ...
- node模块加载机制。
转载于:https://www.cnblogs.com/l8l8/p/9079747.html
- linux ipv6模块,有关Linux ipv6模块加载失败的问题
有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ipv6地址 ...
- Node.js中模块加载机制
Node.js中模块加载机制 模块查找规则-当模块拥有路径但没有后缀时 1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块. 2. 如果模块后缀省略,先找同名JS文件再找同名J ...
- Node.js模块以及模块加载机制
2019独角兽企业重金招聘Python工程师标准>>> Node.js中的模块 在Node.js中,以模块为单位划分功能,通过一个完整的模块加载机制使得开发人员可以将应用程序划分为多 ...
- Node.js---02、node.js 模块加载机制
2019独角兽企业重金招聘Python工程师标准>>> node.js模块分为自定义模块.扩展模块和核心模块.所有模块的加载都是通过关键字require()实现. 1.自定义模块的加 ...
- nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...
- Node.js(一、Node.js基础、模块加载机制、包等)
Node.js(一.Node.js基础.模块加载机制.包等) 1.Node.js基础 1.1.Node是什么 1.2.Node环境安装失败解决方法 1.2.1.Node环境搭建 1.2.2.错误代码2 ...
- nodejs模块加载分析(1).md
前言 上篇 nodejs 启动流程分析中,遗留了几个问题.这一篇,主要讲讲模块加载流程.大家都应该熟悉 timer 模块的相关功能.我们就以 timer 为引子,一步步看下去吧. C++ init 方 ...
最新文章
- Python培训教程:pycharm常用的快捷键合集
- 快排Quick Sort到底有多快?
- ASP.NET HTTP运行时组成详解(转贴)
- Apace、Ngnix、Tomcat三者关系
- 如何知道iframe文件下载download完成
- 深度残差收缩网络:(二)整体思路
- java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离
- 渗透测试入门15之常见端口安全测试
- 微信“拍一拍”的后悔药来了!手滑拍了老板终于有救了
- 自动为人脸上色,Adobe的涂鸦AI想让世界更多彩
- 机器学习与深度学习基础概念介绍
- Testbench编写
- 天津理工大学嵌入式实验 Fritzing电路图连线,自定义芯片原理图方法
- 项目实施中的风险控制与管理
- 鉴客 iPad横屏(Landscape)尺寸规格说明
- Hi-Fi小经验(转)
- 数学建模-对策论模型
- 教你看懂ACC、TJA、 ICA、ICC 这些功能都能干些啥
- 【译】第十篇 Integration Services:高级事件行为
- Codeforces Round #652 div2 总结 端午节前小结