例子
最近用 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