导航
一句话:
每个文件就是一个模块,模块有独立作用域,通过 require / import 建立依赖关系。
Node 里主要有两套:
| 类型 | 关键字 |
|---|---|
| CommonJS | require / module.exports |
| ES Module | import / export |
今天重点说 CommonJS。
这是重头戏。
假设:
const a = require('./a');
Node 做了几件事:
找到真实文件。
Node 不会直接执行文件。
而是变成:
(function (exports, require, module, __filename, __dirname) {
// 你的代码
});
require.cache
直接从缓存拿。
不会再执行一次。
// a.js
console.log('run');
module.exports = {};
多次 require:
只打印一次
导出的对象:
是同一个引用。
// a.js
module.exports = { count: 0 };
多个模块改:
👉 改的是同一个对象。
exports.count = 0;
const a = require('./a');
a.count++;
const a = require('./a');
console.log(a.count);
输出:
1
因为:
它们拿到的是同一份缓存引用
CommonJS 导出的是值的引用,而不是拷贝。