ホームページ > 記事 > ウェブフロントエンド > nodejs が ECMAScript モジュールに json ファイルをロードする方法の簡単な分析
ECMAScript モジュールnodejson ファイルの読み込み方法》次の記事では、nodejs が ECMAScript モジュールに json ファイルを読み込む方法を紹介します。
CommonJS モジュールこの記事を読むと、次のことがわかります:
1、nodejs json ファイルを読み込んで解析する方法
2. fs モジュールで json ファイルを読み取る方法
##3. import.meta.url について学ぶ##3. 新しい URL()
について学ぶ4.load-json-file ライブラリを学習します。
ご存知のとおり、
に json
ファイルをロードする場合は、 # を渡すだけです。 ##require ()関数を直接ロードして、
json オブジェクトを取得できます。
ただし、json ファイルを
ECMAScript モジュール
##まず、ESM
モードを有効にします。実際、公式ドキュメント (http://nodejs.cn/api/esm.html#introduction) にも次の説明があります。ファイルを読み込むにはどうすればよいでしょうか?実際、解決策は 2 つあります。#Node.js
ファイル拡張子、はデフォルトで使用されます。JavaScript コードは CommonJS モジュールとして扱われます。作成者は、
.mjspackage.json "type"
jsonフィールド、または
--input-typeフラグを介して Node に通知できます。 .js は JavaScript コードを ECMAScript モジュール
として扱います。では、
ECMAScript モジュール
に
現在、json ファイルがあるとします。
test.json
{ "name": "project" }
次に、
test.json: を index.js に導入します。 1.
fs を通じて json
ファイルを読み取ります。
import { readFile } from "fs/promises"; // 以promise的方式引入 readFile API const json = JSON.parse( await readFile(new URL('./test.json', import.meta.url)) ) console.log('[json1]:', json); // 输出: { "name": "project" }
説明:
awaitECMAScript のトップレベル
await 提案 によると、
await キーワード モジュール内のトップレベル (非同期関数の外部) で使用できます;import.meta.url
:
nodejs
file:/ /プロトコルの絶対パス。例:
file://home/user/main.js (別のファイルがある場合)
testモジュール内の .js を選択し、
test.js のパスは
new URL('test.js', import.meta.url);
新しい URL
: 生成
file:
fs モジュール関数の場合、
path または
filename パラメータは
file: として使用できます (プロトコルのオブジェクトが渡されます)。
2.
nodejs 組み込み
module
import { createRequire } from "module"; const require = createRequire(import.meta.url); const json = require('./test.json'); console.log('[json2]:', json); // 输出: { "name": "project" }
の
createRequire メソッドによる実装 このメソッドは、以下に基づいています。 on
nodejs によって提供される
createRequire3. 24 行のソース コードを含むサードパーティ ライブラリ
npm Web サイトで偶然発見しましたが、ソース コードは次のように 24 行だけです:
import {readFileSync, promises as fs} from 'node:fs'; const {readFile} = fs; const parse = (buffer, {beforeParse, reviver} = {}) => { // Unlike `buffer.toString()` and `fs.readFile(path, 'utf8')`, `TextDecoder`` will remove BOM. // 这里对buffer进行转义,没有用`buffer.toString()`和`fs.readFile(path, 'utf8')`,是因为`new TextDecoder().decode(buffer)`这种方式可以删除字节顺序标记(BOM) // 解码 buffer 并返回字符串 let data = new TextDecoder().decode(buffer); // 在parse解析之前对字符串进行处理 if (typeof beforeParse === 'function') { data = beforeParse(data); } return JSON.parse(data, reviver); }; // 导出异步方法 export async function loadJsonFile(filePath, options) { // 如果未指定编码,则返回原始缓冲区。 const buffer = await readFile(filePath); return parse(buffer, options); } // 导出同步方法 export function loadJsonFileSync(filePath, options) { // 如果未指定编码,则返回原始缓冲区。 const buffer = readFileSync(filePath); return parse(buffer, options); }
load-json-file ソース コード 全体としては、比較的シンプルですが、できることはたくさんあります。知識ポイントを深く掘り下げることを学びます。
ノード関連の知識の詳細については、nodejs チュートリアル を参照してください。 !
以上がnodejs が ECMAScript モジュールに json ファイルをロードする方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。