nodejs如何在ECMAScript 模块中加载json文件?
众所周知,如果是在CommonJS模块
中加载json
文件,只需通过require()
函数直接加载即可,即能得到json
对象。
但是在ECMAScript模块
中直接加载json文件,会报错,报错如下:
如何启用ECMAScript模块
?
nodejs
官方文档说的已经非常清楚了
那怎么才能在ECMAScript模块
加载json
文件呢?其实是有两种方案的:
假设现在有一个json文件:test.json
文件内容如下:
{ "name": "project" }复制代码
接下来,在index.js
中引入test.json
:
一、 通过 fs
文件系统读取 json
文件
import { readFile } from "fs/promises"; // 以promise的方式引入 readFile API const json = JSON.parse( await readFile(new URL('./test.json', import.meta.url)) ) console.log('[json1]:', json); // 输出: { "name": "project" }复制代码
解释:
await
: 根据 ECMAScript 顶层 await
提案,await
关键字可用于模块内的顶层(异步函数之外);
import.meta.url
:模块的绝对的 file:
URL;
new URL
: 生成file:
协议的对象(对于大多数 fs
模块函数,path
或 filename
参数可以作为使用 file:
协议的 对象传入)。
二、 通过nodejs
内置module
模块的createRequire
方法实现
import { createRequire } from "module"; const require = createRequire(import.meta.url); const json = require('./test.json'); console.log('[json2]:', json); // 输出: { "name": "project" }
作者:前端圈儿
链接:https://juejin.cn/post/7037769682513821704