import 或者require导入时 包名可以加node:
创始人
2025-05-30 02:41:27

最近看别人写的源码时发现一个有趣的现象,
import {promises as fsPromises} from 'node:fs';
import {promisify} from 'node:util';
import {Buffer} from'node:buffer';
import path from 'node:path';
上面这些包都是node内置的
为啥引入的时候需要加个 node: 呢?查资料才知道原因。

require机制
总结一下就是:
require函数是 commonjs 实现模块化的重要函数,首先使用node内置fs模块读取 指定路径 的模块文件 的字符串(fs.readFile读取到的是一个字符串),然后使用内置vm模块进行运行。(vm虚拟环境)。

require加载过程

1.导入相关模块,创建一个Require方法。
2.抽离通过Module._load方法,用于加载模块。
3.Module.resolveFilename 根据相对路径,转换成绝对路径。
4.缓存模块 Module._cache,同一个模块不要重复加载,提升性能。
5.创建模块 id: 保存的内容是 exports = {}相当于this。
6.利用tryModuleLoad(module, filename) 尝试加载模块。
7.Module._extensions使用读取文件。
8.Module.wrap: 把读取到的js包裹一个函数。
9.将拿到的字符串使用runInThisContext运行字符串。
10.让字符串执行并将this改编成exports。

然后看官网api文档Node:ModuleName
使用 node:ModuleName 会直接绕过所需的缓存,直接绕过第4步,不需要等待,直接调用内置模块,但是却无法使用缓存。

相关内容

热门资讯

世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...