Node.js的模块化
什么是模块
在node.js中所有的功能都是以模块形式存在的(每一个文件就是一个模块),所有用户编写的代码都会自动封装在一个模块汇总,模块与模块之间相互独立,如果说要在一个模块中使员工另一个模块的功能,就需要引入模块,另一个模块就需要将数据暴露出来。
什么是自定义模块
我们自己写的模块就是自定义模块
暴露数据
exports.属性或方法名=值;
引入模块
require(“模块路径”):
主模块
一个项目中只允许有一个主模块,通常命名为:main.js ,index.js,app.js,package
主模块是整个项目的启动模块,主模块对整个项目的其它模块进行统筹调度。
Node.js的模块组成
所有用户编写的代码都放在模块中,模块就是文件(函数)
所有用户编写的代码都自动封装在一个函数中,函数有五个参数:
exports
暴露对象,可以将模块中的数据暴露给引入的地方
require
引入模块的函数,用于在一个模块汇总引入另一个模块,并且将子模块暴露的数据赋值给变量
module
模块对象,包含了当前模块的所有信息
__filename
当前模块的文件名
__dirname
当前模块所在的路径(目录路径)
require函数
作用:在当前模块中加载另外一个模块
模块分类
- 自定义模块
我们自己编写的文件就是一个自定义模块
require("./文件名.js") - 第三方模块
第三方程序员或公司开发的模块,要安装再使用
安装可以使用npm包管理工具
npm install 包的名称
require(“模块名”) - 系统模块
node.js开发团队已经开发的功能模块,直接引入即可使用,不需要安装也不需要自己写
常用的系统模块:fs,http,url,path…
reuqire函数的注意事项 - 当引入的模块有语法错误时,会报错
- 当引入的模块路径有错时,也会报错
- 当一个模块被多次引入时,只执行一次,将暴露的对象直接写入缓存,以后就直接冲缓存中读取
exports
作用:将模块中需要共享给其他模块的数据暴露(导出)到引用处
语法
- exports.属性名=值;
- export.方法名=函数
注意 - exports是module.exports对象的引用
- exports是module.exports对象的引用,不能改变指向,只能添加属性和方法
- module.exports才是真正的暴露对象,指向哪里就暴露哪里
module模块对象
module.exports是真正的暴露对象,exports对象只是对它的引用
- module.exports.属性=值;
- module.exports.方法=函数;
- module.exports=对象或函数;
方法
- moudle.id:模块id,模块名称
- module.parent:模块的父级
- module.filename:模块的文件名和路径
- module.children:子模块列表
- module.paths:模块查找路径,如果当前目录找不到node_modules就去上一级目录查找,直到根目录,如果配置了NODE_PATH环境变量,则会再去环境变量指向的路径查找