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步,不需要等待,直接调用内置模块,但是却无法使用缓存。

相关内容

热门资讯

cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...