JavaScript JSON模块如何工作,过程是怎样
Admin 2022-05-19 群英技术资讯 859 次浏览
ECMAScript 模块系统( import
和 export
关键字)默认只能导入 JavaScript 代码。
但是,将应用程序的配置保存在一个JSON文件中往往很方便,因此,我们可能想直接将JSON文件导入ES模块中。
长期以来,commonjs 模块格式支持导入JSON。
好消息是,第三阶段的一个名为JSON模块的新提议,提出了一种将JSON导入到ES模块的方法。现在,我们来看看JSON模块是如何工作的。
假设,我们有一个 config.json
文件,内容如下:
{ "name": "My Application", "version": "v1.2" }
如何将 config.json
导入ES模块?
例如,我们创建一个简单的Web应用程序,从JSON配置文件中显示应用程序的名称和版本。
如果你试图直接导入 config.json
,Node.js会抛出一个错误。
import http from 'http'; import config from './config.json'; http .createServer((req, res) => { res.write(`App name: ${config.name}\n`); res.write(`App version: ${config.version}`); res.end(); }) .listen(8080);
尝试运行应用程序时,node.js抛出错误 TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json"
Node.js 在使用 import
语句时,默认期望的是JavaScript代码。但由于JSON模块的提议,你可以表明你要导入的数据类型:JSON
。
在修复应用程序之前,我们先来看看JSON模块提案有哪些内容。
JSON模块提案的本质是允许使用常规的import
语句在ES模块中导入JSON数据。
可以通过添加导入断言来导入JSON内容:
import jsonObject from "./file.json" assert { type: "json" };
assert {type: "json"}
是一个导入断言,指示模块应该被解析和导入为json。
jsonObject
变量包含解析file.json
的内容后创建的普通JavaScript对象。
一个JSON模块的内容是使用默认导入的,命名的导入不可用。
JSON模块也可以动态导入:
const { default: jsonObject } = await import('./file.json', { assert: { type: 'json' } });
当一个模块被动态导入时,包括一个JSON模块,默认的内容在default
属性中可用。
在这种情况下,导入断言表示JSON类型。但是,有一个更通用的提议导入断言(目前在第3阶段),允许导入更多数据格式,如CSS模块。
现在,我们将JSON模块集成到Web应用程序中:
import http from 'http'; import config from './config.json' assert { type: "json" }; http .createServer((req, res) => { res.write(`App name: ${config.name}\n`); res.write(`App version: ${config.version}`); res.end(); }) .listen(8080);
主模块现在导入config.json
文件,并访问其值config.name
和config.version
。
JSON模块工作在Node.js版本>=17.1
中,也可以使用--experimental-json-modules
标志启用Experimental JSON模块
node --experimental-json-modules index.mjs
在浏览器环境中,JSON模块从Chrome 91开始可用。
默认情况下,ES模块只能导入JavaScript代码。
由于JSON模块的提议,你可以直接将JSON内容导入到ES模块中。只要在导入语句后使用导入断言就可以了。
import jsonContent from "./file.json" assert { type: "json" };
你可以从Node.js 17.1开始使用JSON模块,使用实验性标志--experimental-json-modules
,并在Chrome 91及以上版本中使用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家分享的是关于JavaScript执行上下文的内容,一些朋友可能对于JavaScript执行上下文不是很了解,对此这篇文章就给大家来介绍一下JavaScript执行上下文机JavaScript执行上下文栈,感兴趣的朋友就继续往下看吧。
JS实现表单验证案例 本文实例为大家分享了JS实现表单验证案例的具体代码,供大家参考,具体内容如下 1.当输入框失去焦点时,验证输入内容是否符合要求 (1)获取表单输入框(2)绑定 onblur 事件(3)获取输入内容(4)判断是否符合规则(5)如果不符合规则,则显示错误提示信息 2.当点击注册按钮是,判断所有输入框的内容是否符合要求,如果不符合则阻止表单提交 (1)获取表单对象(2)微表单对象绑定 onsubmit(3)判断所有输入框是否都符合要求,如果符合,则返回true,如果有一项不符合,则返回false &l ...
这篇给大家分享的一个JavaScript中for循环使用的示例,需求是实现从1加到50的计算,文中示例代码介绍的非常详细,对大家学习for循环的使用有一定的参考价值,感兴趣的朋友接下来一起跟随小编看看吧。
node服务CPU过高怎么办?怎么排查?下面本篇文章给大家整理分享下node服务CPU过高的排查思路,希望对大家有所帮助!
这篇文章主要为大家介绍了Electron调用外接摄像头并拍照上传实例实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008