Node.js 中的 node:module 语法是个什么?
in 码农技术宅 with 0 comment

Node.js 中的 node:module 语法是个什么?

in 码农技术宅 with 0 comment

例子

最近用 vite 初始化项目时发现 vite.config.ts 中的模块引入是这样写的:

import { fileURLToPath, URL } from 'node:url';

还真没见过,就研究了一下~

其实这个是 Node.js 的 ES Modules 语法。其实这个 import 语法在写业务项目中很常见,因为 babel 本身有自己的一套 ES Modules 实现。

但是换到 node.js 中后面的冒号语法是咋回事呢?

Node.js 官方说明

由于 ES Modules 是通过 URLs 来解析并缓存的,这就意味着特殊字符需要被 %编码,即常见的 # 被编码为 %23? 变为 %3F

同样的,file: node:和 data: 这样的 URL schemes 也被支持。

而上面例子中的 node:url 其实就是用来访问 node 内置模块的一种语法。如:

import fs from 'node:fs/promises';

什么版本的 Node 支持?

官方文档的历史记录显示:

v16.0.0, v14.18.0 版本加入了 node: 语法的支持

这可能也是为什么 vite 生态的很多包的 package.json 中都有这个声明的原因了:

"engines": {
  "node": "^14.18.0 || >=16.0.0"
}

参考资料

Responses
京ICP备15030655号-1