我如何在ECMAScript 6中访问JSON文件?
以下方法无法使用:
import config from '../config.json'
如果我尝试导入JavaScript文件,则这很好用。
https://www.stefanjudis.com/snippets/how-to-import-json-files-in-es-modules-node-js/
ES模块在Node.js领域仍然相对较新(从Node 14开始稳定)。模块具有内置模块系统和顶级等待等功能。模块是带有内置模块系统的,还具有一些特性,例如顶级等待。
我读了Pawel Grzybek关于ES模块的一个有信息量的帖子并了解到今天不能在ES模块中导入JSON文件。
import info from `./package.json` assert { type: `json` };
const { default: info } = await import("./package.json", {
assert: {
type: "json",
},
});
这真是太糟糕了,因为我已经习惯了在Node.js中进行require
调用,例如const data = require('./some-file.json')
。
但是你能否在今天的Node.js中使用import assertions呢?
截至目前(最新版本v18.12),当前Node.js LTS仍将import assertions标记为实验性功能。
本文介绍如果您尚不想使用实验性功能来处理ES模块中的JSON,可以采取哪些方法。
选项1:自行读取和解析JSON文件
Node.js文档建议使用fs
模块并自行完成读取文件和解析文件的工作。
import { readFile } from 'fs/promises';
const json = JSON.parse(
await readFile(
new URL('./some-file.json', import.meta.url)
)
);
选项 2:利用 CommonJS 的 require
函数加载 JSON 文件
文档还指出,您可以使用 createRequire
来加载 JSON 文件。这种方法是 Pawel 在他的博客文章中建议的方法。
createRequire
允许您构建一个 CommonJS require
函数,并使用典型的 CommonJS 特性,如在 Node.js EcmaScript 模块中读取 JSON。
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
webpack
和json-loader
。 - suprita shankar.mjs
文件,并像往常一样进行导入。 - Ronnie Royston