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

Analisis ringkas tentang cara nodejs memuatkan fail json dalam modul ECMAScript

青灯夜游
Lepaskan: 2021-12-07 18:49:04
ke hadapan
2498 orang telah melayarinya

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"
}
Salin selepas log masuk
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" }
Salin selepas log masuk
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 <🎜 modul >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(&#39;test.js&#39;, 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(&#39;./test.json&#39;);

console.log(&#39;[json2]:&#39;, json); // 输出: { "name": "project" }
Salin selepas log masuk

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 &#39;node:fs&#39;;

const {readFile} = fs;

const parse = (buffer, {beforeParse, reviver} = {}) => {

	// Unlike `buffer.toString()` and `fs.readFile(path, &#39;utf8&#39;)`, `TextDecoder`` will remove BOM.
        // 这里对buffer进行转义,没有用`buffer.toString()`和`fs.readFile(path, &#39;utf8&#39;)`,是因为`new TextDecoder().decode(buffer)`这种方式可以删除字节顺序标记(BOM)
        
        // 解码 buffer 并返回字符串
	let data = new TextDecoder().decode(buffer);
        
        // 在parse解析之前对字符串进行处理
	if (typeof beforeParse === &#39;function&#39;) {
		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);
}
Salin selepas log masuk
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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan