模块化
- 模块化:将一个复杂的程序文件根据一定规则(规范)拆分成多个文件的过程
模块:模块化拆分出的每个文件就是一个模块
(注意:模块内部数据是私有的,但是模块可以暴露内部数据方便其他模块使用) - 模块化项目:编码时按照模块一个一个编码的,整个项目就是一个模块化项目
- 模块化优点
- 防止命名冲突
- 高复用性
- 高维护性
模块暴露数据
模块化的书写
1.创建me.js
const fn=()=>console.log('me')
//暴露数据
module.exports=fn
2.创建index.js
//导入模块
const fn=require('./me.js')
//调用函数
fn()
暴露数据
方式:
- module.exports=value
- exports.name=value
注意:
module.exports可以暴露任意数据- 模块内部module和exports的隐式关系
exports=module.exports={},require返回的是目标模块中module.exports的值
导入(引入)模块
在模块中使用require引入文件
const test=require('./me.js')
require的注意事项:
- 自己创建的模块 导入路径建议写相对路径,不能省略./和../
- js和json文件导入可以不写后缀
- 导入其他类型的文件,以js文件进行处理
- 当导入的路径是一个文件夹,首先检测该文件夹下的package.json文件中main属性对应的文件
如果存在则导入,不存在时 会报错
如果main属性或package.json不存在,尝试导入文件夹下的index.js和index.json - 导入node.js内置模块时,直接require模块的名字即可,无需./或../
导入模块流程
- 转化为绝对路径,定位目标文件
- 缓存检测
- 读取目标文件代码
- 包裹为一个函数并执行(自执行函数)。通过
arguments.callee.toString()查看自执行函数 - 缓存模块的值
- 返回module.exports的值