nodejs模块化规范
模块化规范介绍
- 1.什么叫模块化?(模块 == js文件)
一个js文件可以引入另一个js文件中的数据,这种开发模式就叫做模块化开发
- 2.模块化开发的好处?
- (1) 将功能分离出来
- 一个js文件只负责处理一个功能,这样做的好处是业务逻辑清晰,便于维护
- (2) 按需导入
- 用到哪一个功能,就导入哪一个js文件。模块化开发是渐进式框架的共同特征。
- (3) 避免变量污染
- 一个js文件(模块),都是一个独立的作用域。互不干扰,不用考虑变量名冲突问题。
了解一下前端模块化开发进程
ES6之前: js语言本身不支持模块化开发,一般需要通过第三方工具来实现模块化开发。
例如:sea.js. <https://www.zhangxinxu.com/sp/seajs/> require.js. <https://requirejs.org/>
ES6 : ES6新增了模块化开发语法
Nodejs : Nodejs本身也支持模块化开发,但是和前端的ES6有一些细微的区别。如果自己写一些npm框架,就必须要掌握nodejs模块化语法
模块化语法规范介绍
- 任何一个语法,都需要遵循一定的规范。不同平台需要遵循的规范不同。一般情况下,模块化语法规范主要有三种。
- CommonJS规范:nodejs默认支持的
- ES6规范:前端的ES6语法支持的规范
- CMD 和 AMD 模块化规范:ES6语法之前的模块化语法规范,现在已经几乎不用
CommonJS规范实现模块化语法
- 1.CommonJS规范只有两句话
- 1.模块必须要使用
require()导入
- 2.模块必须要使用
module.exports导出
- 2.导出模块语法一般放在js文件最底部,且只需要执行一次即可
- 3.一般不需要把模块化中所有的变量全部都导出,只需要导出需要用的变量即可
模块缓存机制
- 1.当一个模块第一次加载时,
nodejs会执行里面的代码,并且导出模块
- 2.nodejs会将导出的模块放入缓存中
- 3.当重复导入一个模块的时候,
nodejs会先从缓存中读取模块。如果缓存中有,就会从缓存读取。缓存没有就重复步骤1

nodejs三种模块及require()加载原理
- 1.nodejs有三种模块
- 有一种: 核心模块、内置模块
- nodejs作者写的,这些模块js文件会随着安装nodejs的时候一起安装。因此我们可以直接使用,而无需下载。
- 例如:fs、path、http都是核心模块
- 第二种:第三方模块
- npm官网上面的模块,这些都是大佬写的模块。需要下载后使用
- 例如:express、cors、bod-parser
- 第三种:自定义模块
- 2.require('文件路径')加载原理
- (1) 自定义模块:必须要写文件路径,
require()会得到这个模块里面的module.exports对象
- (2) 第三方模块:写模块名。nodejs会自动从你的
node_module文件夹里面去找这个模块的名字,然后执行模块里面的index.js代码,得到里面的module.exports
- 如果当前目录没有
module.exports就会从上级目录找,以此类推。一直找到你的磁盘根目录。还找不到就会提示报错模块不存在(类似变量作用域的就近原则)
- (3) 核心模块:写模块名。nodejs会自动从你的node安装包路径里面去找。