Rumah  >  Artikel  >  hujung hadapan web  >  Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

青灯夜游
青灯夜游ke hadapan
2021-12-07 18:49:042435semak imbas

Cara memuatkan fail json dalam nod dalam modul ECMAScript" Artikel berikut akan memperkenalkan kepada anda cara nodejs memuatkan fail json dalam modul ECMAScript. Saya harap ia akan membantu anda!

Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

Selepas membaca artikel ini, anda akan belajar:

1, nodejs Cara memuatkan dan menghuraikan fail json

2. Cara modul fs membaca fail json

3. Belajar import.meta.url

3 Belajar URL()

4. Belajar perpustakaan load-json-file

Seperti yang kita semua tahu, jika anda memuatkan fail CommonJS模块 dalam json, anda hanya perlu memuatkannya terus melalui fungsi require(), dan anda akan mendapat jsonObjek.

Tetapi jika anda memuatkan fail json terus dalam ECMAScript模块, ralat akan dilaporkan seperti berikut:

Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

Pertama. , dayakan mod ESM Malah, dokumentasi rasmi (http://nodejs.cn/api/esm.html#introduction) juga menyatakan:

Node.js merawat. Kod JavaScript sebagai modul CommonJS secara lalai. Pengarang boleh memberitahu Node.js untuk menganggap kod JavaScript sebagai modul ECMAScript melalui .mjs sambungan fail, medan package.json "type" atau bendera --input-type

Bagaimana pula dengan memuatkan ECMAScript模块 fail? Sebenarnya, terdapat dua penyelesaian: json

Andaikan terdapat fail json sekarang:

test.json

Kandungan fail adalah seperti berikut:

{
    "name": "project"
}
Seterusnya , dalam

Diperkenalkan dalam index.js:test.json

1. Baca fail

melalui sistem fail 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" }
Penjelasan:

: Menurut await ECMAScript peringkat teratas cadangan await, kata kunci boleh digunakan di peringkat teratas dalam modul (di luar fungsi tak segerak); await mengembalikan tempatan Laluan mutlak protokol, contohnya:

, jika terdapat fail lain

dalam modul, maka laluan import.meta.url ialah nodejs; file://file://home/user/main.jstest.js: Hasilkan test.js objek protokol (untuk kebanyakan new URL('test.js', import.meta.url) fungsi modul, parameter

atau

boleh dihantar sebagai objek menggunakan protokol new URL). file:fs2. Pelaksanaan melalui kaedah path modul filename terbina dalam file:

nodejs Kaedah ini dilaksanakan berdasarkan kaedah module yang disediakan oleh createRequire.

import { createRequire } from "module";

const require = createRequire(import.meta.url);
const json = require('./test.json');

console.log('[json2]:', json); // 输出: { "name": "project" }

nodejscreateRequire3 Pustaka pihak ketiga dengan 24 baris kod sumber

Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

load-json-file

Saya terjumpa secara tidak sengaja di tapak web npm saya mendapati bahawa kod sumber hanya mempunyai 24 baris, seperti berikut: load-json-file

load-json-file source code Secara keseluruhan, ia agak mudah, tetapi ada juga banyak yang perlu dipelajari dan digali lebih mendalam.

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);
}
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

tutorial nodejs! !

Atas ialah kandungan terperinci Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam