Node 导入模块:require()和导出模块:module.exports、exports的用法及注意点

Node 导入模块:require()和导出模块:module.exports、exports的用法及注意点

一月 22, 2022
该文章更新于 2022.01.22

1、require()导入模块

注意:使用require方法加载模块,会执行被加载模块中的代码

1
2
3
4
5
6
7
8
9
10
/* 模块有三大分类:内置模块、自定义模块、第三方模块 */

/* 示例:使用require方法加载模块 */
// 注意:使用require方法加载模块,会执行被加载模块中的代码
// 1、加载内置模块
const fs = require('fs')
// 2、加载自定义模块
const riven = require('./riven-custom')
// 3、加载第三方模块(第三方模块需要我们先下载才能使用)
const moment = require('moment')

2、module.exports、exports导出模块

注意:require()导入模块时,得到的永远是module.exports指向的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
console.log('这是我的自定义模块:Riven-custom');

/* 时刻谨记,require()模块时,得到的永远是module.exports指向的对象*/
// module.exports===exports(只是在默认情况下全等,指向改变后不是全等)

/* 指向误区:谨记以module.exports指向的对象为准 */
// 1、2指向的是不同的对象,3、4指向的是同一个对象

// 1、指向:{ username: '李四' }
exports.username = '张三'
module.exports = {
username: '李四'
}

// 2、指向:{ username: '张三' }
module.exports.username = '张三'
exports = {
username: '李四'
}
// module.exports===exports?: false
console.log('module.exports===exports?:', module.exports === exports)

// 3、指向:{ username: '张三', age: 18 }
exports.username = '张三'
module.exports.age = 18

// 4、指向:{ username: '张三', age: 18, sex: '男' }
exports = {
username: '张三',
age: 18
}
module.exports = exports
module.exports.sex = '男'
// module.exports===exports?: true
console.log('module.exports===exports?:', module.exports === exports)