模块化
更新时间: 2024-11-01 17:02:10
# 模块化介绍
什么是模块化与模块?
将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化,其中拆分出的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用。什么是模块化项目?
编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目。模块化的好处
下面是模块化的一些好处:
- 防止命名冲突
- 高复用性
- 高维护性
# 模块化初体验
// me.js
// 声明一个函数
function tiemo() {
console.log('贴膜...')
}
// 暴露数据
module.exports = tiemo
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
// index.js
// 导入模块
const tiemo = require('./me.js')
// 调用函数
tiemo()
1
2
3
4
5
6
2
3
4
5
6
# 模块暴露数据
- module.exports = value
// 声明一个函数
function tiemo() {
console.log('贴膜...')
}
// 捏脚
function niejiao() {
console.log('捏脚...')
}
// 暴露数据
module.exports = {
tiemo,
niejiao
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- exports.name = value
// 声明一个函数
function tiemo() {
console.log('贴膜...')
}
// 捏脚
function niejiao() {
console.log('捏脚...')
}
// 暴露数据
exports.niejiao = niejiao
exports.tiemo = tiemo
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
注意
- module.exports可以暴露任意数据
- 不能使用exports = value的形式暴露数据,模块内部module与exports的隐式关系 exports = module.exports = {}
# 导入文件模块
在模块中使用require传入文件路径即可引入文件
const test = require('./me.js')
1
reqiure使用的一些注意事项:
- 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./和../
- js和json文件导入时可以不用写后缀,c/c++编写的node扩展文件也可以不写后缀,但是一般用不到
- 如果导入其他类型的文件,会以js文件进行处理
- 如果导入的路径是个文件夹,则会首先检测该文件夹下package.json文件中main属性对应的文件,如果main属性不存在,或者package.json不存在,则会检测文件夹下的index.js和index.json,如果还是没找到,就会报错
- 导入node.js内置模块时,直接require模块的名字即可,无需加./和../
::: success
- require还有一种使用场景,会在包管理工具章节介绍
- module.exports、exports以及require这些都是CommonJS模块化规范中的内容,而nodejs实现了CommonJS模块化规范
:::
# require导入模块的基本流程
这里我们介绍一下require导入自定义模块的基本流程
- 将相对路径转为绝对路径,定位目标文件
- 缓存检测
- 读取目标文件代码
- 包裹为一个函数并执行(自执行函数)。通过arguments.callee.toString()查看自执行函数
- 缓存模块的值
- 返回module.exports的值