1
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种替代方案,其实都不是最佳方案,但不影响你解决问题。

参考文章


看见了
876 声望16 粉丝

前端开发,略懂后台;