模块化

更新时间: 2024-11-01 17:02:10

# 模块化介绍

  • 什么是模块化与模块?
    将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化,其中拆分出的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用。

  • 什么是模块化项目?
    编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目。

  • 模块化的好处
    下面是模块化的一些好处:

  1. 防止命名冲突
  2. 高复用性
  3. 高维护性

# 模块化初体验

// me.js
// 声明一个函数
function tiemo() {
    console.log('贴膜...')
}

// 暴露数据
module.exports = tiemo 
1
2
3
4
5
6
7
8
// index.js  
// 导入模块
const tiemo = require('./me.js')

// 调用函数
tiemo()
1
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
  • 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

注意

  • module.exports可以暴露任意数据
  • 不能使用exports = value的形式暴露数据,模块内部module与exports的隐式关系 exports = module.exports = {}

# 导入文件模块

在模块中使用require传入文件路径即可引入文件

const test = require('./me.js')  
1

reqiure使用的一些注意事项:

  1. 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./和../
  2. js和json文件导入时可以不用写后缀,c/c++编写的node扩展文件也可以不写后缀,但是一般用不到
  3. 如果导入其他类型的文件,会以js文件进行处理
  4. 如果导入的路径是个文件夹,则会首先检测该文件夹下package.json文件中main属性对应的文件,如果main属性不存在,或者package.json不存在,则会检测文件夹下的index.js和index.json,如果还是没找到,就会报错
  5. 导入node.js内置模块时,直接require模块的名字即可,无需加./和../

::: success

  • require还有一种使用场景,会在包管理工具章节介绍
  • module.exports、exports以及require这些都是CommonJS模块化规范中的内容,而nodejs实现了CommonJS模块化规范
    :::

# require导入模块的基本流程

这里我们介绍一下require导入自定义模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件
  2. 缓存检测
  3. 读取目标文件代码
  4. 包裹为一个函数并执行(自执行函数)。通过arguments.callee.toString()查看自执行函数
  5. 缓存模块的值
  6. 返回module.exports的值