例子
最近用 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"
}参考资料
本文由 savokiss 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 20, 2022 at 08:12 am