一、Node是什么?
Node.js是一个基于Chrome V8引擎的JS运行环境。
二、Node解决了哪些问题?
Node在处理高并发,I/O密集场景有明显性能优势。
- 高并发,是指在同一时间并发访问服务器
- I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密。
三、Node模块化规范
3.1 什么是模块化?模块化有什么好处?
- 什么叫模块化?
一个js文件可以引入另外一个js文件中的数据,这种开发方式叫做模块化开发。 - 模块化开发的好处?
- 将功能分离出来,一个js文件只处理一个功能,这样做业务逻辑清晰,便于维护。
- 按需导入
用哪个功能就导入哪个文件。 - 避免变量污染
一个js文件,都是一个独立的作用域。互不干扰,不用考虑变量名冲突问题。
3.2 CommonJS规范
- 模块导入必须用
require()导入 - 模块导出需要用
module.exports导出
exports与module.exports区别
3.3 模块缓存机制
- 当一个模块第一次加载时,nodejs会执行里面的js代码,并且导出模块
- nodejs会将导出的模块放入缓存中
- 当重复导入一个模块时,nodejs会先从缓存中读取模块。如果缓存中有,就从缓存读取。缓存没有重复步骤1
3.4 nodejs三种模块及require()加载原理
3.4.1 node 三个模块
- 核心模块、内置模块
例如:fs、path、http都是核心模块,这些模块会随着nodejs安装一起安装。 - 第三方模块
npm官网上的模块,需要下载后使用 - 自定义模块
3.4.2 require('文件路径')加载原理
-
(1)自定义模块:必须要写文件路径,
require()会得到这个模块里面的module.exports对象 -
(2)第三方模块 :写模块名。 nodejs会自动从你的node_module文件夹里面去找这个模块的名字,然后执行模块里面的
index.js代码,得到里面的module.exports- 如果当前目录没有module.exports就会从上级目录找,以此类推。一直找到你的磁盘根目录。 还找不到就会报错提示 模块不存在(有点类似于变量作用域就近原则)
-
(3)核心模块:写模块名。 nodejs会自动从你的node安装包路径里面去找。