Moduly ES jsou v zemi Node.js stále poměrně nové (jsou stabilní od uzlu 14). Moduly jsou dodávány s vestavěným modulovým systémem a funkce, jako je nejvyšší úroveň, čekají.
Přečetl jsem si informativní příspěvek o modulech ES od Pawela Grzybka a zjistil jsem, že dnes nelze importovat soubory JSON do modulů ES. To je skutečný průšvih, protože jsem docela zvyklý dělat require
volání jako const data = require('
v Node.js.
Aktualizace:Od Node.js 17
, je možné využít aserce importu v modulech ECMAScript k importu JSON
soubory.
/*
Experimental JSON import is supported since Node.js 17.5
$ 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",
},
});
Ale pozor, moduly JSON jsou v Node.js stále označeny jako experimentální!
Jak se věci mají v zemi prohlížeče? Chrome dodává kontrolní výrazy pro import od v91
, a pokud je Babel ve vašem toolchainu, můžete ho začít používat!
Tento příspěvek vysvětluje způsoby, jak se vypořádat s JSON
v modulech ES, pokud používáte verzi Node.js před 17
nebo nechcete používat --experimental-json-modules
v Node.js 16
.
Možnost 1:Čtěte a analyzujte soubory JSON sami
Dokumentace Node.js doporučuje používat fs
a proveďte práci při čtení souborů a jejich analýze sami.
import { readFile } from 'fs/promises';
const json = JSON.parse(
await readFile(
new URL('./some-file.json', import.meta.url)
)
);
Možnost 2:Využijte CommonJS require
funkce pro načtení souborů JSON
Dokumentace také uvádí, že můžete použít createRequire
k načtení souborů JSON. Tento přístup je způsob, jakým Pawel radí ve svém příspěvku na blogu.
createRequire
umožňuje vytvořit CommonJS require
k použití typických funkcí CommonJS, jako je čtení JSON v modulech Node.js EcmaScript.
import { createRequire } from "module";
const require = createRequire(import.meta.url);
const data = require("./data.json");
Jak byste měli načítat soubory JSON?
Pro budoucnost jsou cestou import asercí a moduly ESM JSON !
U verzí Node.js, které je zatím nepodporují, nevím. 🤷♂️ Ani jedna možnost mi nepřijde dobrá, ale pravděpodobně zůstanu u první možnosti, protože je srozumitelnější.