【node】如何在ES modules中匯入JSON檔案

看見了發表於2023-04-28
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種替代方案,其實都不是最佳方案,但不影響你解決問題。

參考文章

相關文章