ECMAScript模块中node怎样载入json文档》下边本文就要来给大家介绍一下nodejs在ECMAScript 模块中载入json文件信息方式,希望能帮助到大家!
看了这篇文章,我们将学习到:
1、nodejs 怎样载入、分析json文档
2、fs 控制模块怎样载入json文档
3、学习到import.meta.url
3、学习到new URL()
4、学习到load-json-file库
大家都知道,要是在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
方式完成。
三、 24行源代码的第三方库 load-json-file
load-json-file 这是我在npm网址不经意间找到的,源代码仅有只是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 源代码 整体而言相对性非常简单,可是也有许多可以学深入分析课程的学习重点知识。
大量node基本知识,请访问:nodejs 实例教程!!
以上就是关于浅谈ECMAScript模块中nodejs怎样载入json文件信息具体内容,大量欢迎关注AdminJS其他类似文章!