Comment charger des fichiers json dans node dans le module ECMAScript》L'article suivant vous présentera comment nodejs charge les fichiers json dans le module ECMAScript. J'espère qu'il vous sera utile !
Après avoir lu cet article, vous apprendrez :
1. nodejs Comment charger et analyser les fichiers json
2. Comment le module fs lit les fichiers json
3.
3. Apprenez une nouvelle URL()
4. Apprenez la bibliothèque de fichiers Load-json
Comme nous le savons tous, si vous chargez json
dans le module CommonJS
> Fichier. , chargez-le simplement directement via la fonction require()
, et vous pourrez obtenir l'objet json
. CommonJS模块
中加载json
文件,只需通过require()
函数直接加载即可,即能得到json
对象。
但是在ECMAScript模块
中直接加载json文件,会报错,报错如下:
首先,先启用
ESM
模式,其实官方文档(http://nodejs.cn/api/esm.html#introduction)中也有说明:Node.js 默认将 JavaScript 代码视为 CommonJS 模块。 作者可以通过
.mjs
文件扩展名、package.json
"type"
字段、或--input-type
标志告诉 Node.js 将 JavaScript 代码视为 ECMAScript 模块
那怎么才能在ECMAScript模块
加载json
文件呢?其实是有两种方案的:
假设现在有一个json文件:test.json
文件内容如下:
{ "name": "project" }
接下来,在index.js
中引入test.json
:
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" }
解释:
await
: 根据 ECMAScript 顶层 await
提案,await
关键字可用于模块内的顶层(异步函数之外);
import.meta.url
:nodejs
中返回模块在本地的file://
协议的绝对路径,例如:file://home/user/main.js
, 如果模块中还有另外一个文件test.js
,那么test.js
的路径就是new URL('test.js', import.meta.url)
;
new URL
: 生成file:
协议的对象(对于大多数 fs
模块函数,path
或 filename
参数可以作为使用 file:
协议的对象传入)。
nodejs
内置module
模块的createRequire
方法实现import { createRequire } from "module"; const require = createRequire(import.meta.url); const json = require('./test.json'); console.log('[json2]:', json); // 输出: { "name": "project" }
这种方法是根据nodejs
提供的createRequire
方法实现。
load-json-file
module ECMAScript
, une erreur sera signalée. L'erreur est la suivante : Tout d'abord, activez le mode ESM
. En fait, le document officiel (http://nodejs.cn /api/esm.html#introduction) :
traite le code JavaScript comme un module CommonJS par défaut. Les auteurs peuvent transmettre l'extension de fichier .mjs
, le champ package.json
"type"
ou --input-type</code > Flag indique à Node.js de traiter le code JavaScript comme un module ECMAScript <a href="https://www.php.cn/course/list/24.html" target="_blank"></a></p>Alors, comment puis-je charger un fichier <code>json
dans le module ECMAScript
? En fait, il y a deux solutions : 🎜🎜Supposons qu'il y ait maintenant un fichier json : test.json
🎜🎜Le contenu du fichier est le suivant : 🎜
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); }
index. js
Introduisez test.json
:🎜json
via fs<.> système de fichiers 🎜rrreee🎜Explication : 🎜🎜<code>await
: Selon Proposition await
ECMAScript de niveau supérieur 🎜, le mot-clé await
peut être utilisé au niveau supérieur du module (en dehors de la fonction asynchrone) ; 🎜🎜import .meta.url
: nodejs
renvoie le chemin absolu du protocole file://
local du module, par exemple : file://home/ user/main.js
, s'il y a un autre fichier test.js
dans le module, alors le chemin de test.js
est nouvelle URL ( 'test.js', import.meta.url)
; 🎜🎜nouvelle URL
: Générer un objet du protocole file:
(pour la plupart des fonctions du module fs
, path ou <code>filename
peut être transmis en tant qu'objet en utilisant le protocole file:
). 🎜createRequire
du module module
intégré de nodejs<.> La méthode est implémentée sur la base de la méthode <code>createRequire
fournie par nodejs
. 🎜🎜🎜load-json-file
🎜🎜🎜load-json-file🎜 a été accidentellement découverte par moi sur le site npm. Le code source ne comporte que 24 lignes, comme suit : 🎜rrreee🎜🎜load-json-file source code🎜 Dans l'ensemble, c'est relativement simple, mais il existe également de nombreux points de connaissances qui peuvent être appris en profondeur. 🎜🎜Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!