ECMAScript模块中node怎样载入json文档

lxf2023-03-17 19:51:01

ECMAScript模块中node怎样载入json文档》下边本文就要来给大家介绍一下nodejs在ECMAScript 模块中载入json文件信息方式,希望能帮助到大家!

ECMAScript模块中node怎样载入json文档

看了这篇文章,我们将学习到:

1、nodejs 怎样载入、分析json文档

2、fs 控制模块怎样载入json文档

3、学习到import.meta.url

3、学习到new URL()

4、学习到load-json-file库

大家都知道,要是在CommonJS控制模块中载入json文档,仅需根据require()函数公式立即载入就可以,既可以获得json目标。

但在ECMAScript控制模块上直接载入json文档,会出错,出错如下所示:

ECMAScript模块中node怎样载入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.urlnodejs中回到控制模块在当地的file://合同的相对路径,比如:file://home/user/main.js, 假如模块中还有另外一个文档test.js,那样test.js的路线便是new URL('test.js', import.meta.url)

new URL: 形成file: 合同的目标(对于大部分 fs 控制模块函数公式,pathfilename 主要参数可作为应用 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方式完成。

ECMAScript模块中node怎样载入json文档

三、 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其他类似文章!