Node 14开始,开始支持ES module语法。
JSON模块工作在Node.js版本>=17.1
中,也可以使用--experimental-json-modules
标志启用Experimental JSON
模块
/*
Experimental JSON import in Node.js
$ node index.mjs
*/
// An import assertion in a static import
import info from `./package.json` assert { type: `json` };
// An import assertion in a dynamic import
const { default: info } = await import("./package.json", {
assert: {
type: "json",
},
});
我已经习惯在node.js使用require
导入json,例如const data = require('./some-file.json')
,上面的写法无疑让人感到沮丧。
如果你还不想使用这个实验性的功能,这篇文章解释了在ES模块中处理JSON的方法。
1. 手动读取和解析JSON文件
其实就是使用fs
模块读取文件,然后再用JSON.parse
解析。
import { readFile } from 'fs/promises';
const json = JSON.parse(
await readFile(
new URL('./some-file.json', import.meta.url)
)
);
2. 利用CommonJS的require函数来加载JSON文件(推荐)
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
createRequire
允许你构造一个CommonJS require函数来使用CommonJS的典型功能,例如在Node.js的EcmaScript模块中读取JSON。
总结
import assertions
无疑是未来ES modules导入json的最佳选择,但可惜它目前依然是实验性功能。至于介绍的2种替代方案,其实都不是最佳方案,但不影响你解决问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。