作者:Dmitri Pavlutin
译者:前端小智
来源:dmitripavlutin
有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。ECMAScript 模块系统(
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
import
和 export
关键字)默认只能导入 JavaScript 代码。但是,将应用程序的配置保存在一个JSON文件中往往很方便,因此,我们可能想直接将JSON文件导入ES模块中。
长期以来,commonjs 模块格式支持导入JSON。
好消息是,第三阶段的一个名为JSON模块的新提议,提出了一种将JSON导入到ES模块的方法。现在,我们来看看JSON模块是如何工作的。
1.导入 config.json.
假设,我们有一个
config.json
文件,内容如下:{
"name": "My Application",
"version": "v1.2"
}
如何将
config.json
导入ES模块?例如,我们创建一个简单的Web应用程序,从JSON配置文件中显示应用程序的名称和版本。
【厉害了,ECMAScript 新提案(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模块提案有哪些内容。
2. 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模块。
3. 启用JSON模块
现在,我们将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开始可用。
4.总结
默认情况下,ES模块只能导入JavaScript代码。
由于JSON模块的提议,你可以直接将JSON内容导入到ES模块中。只要在导入语句后使用导入断言就可以了。
import jsonContent from "./file.json" assert { type: "json" };
你可以从Node.js 17.1开始使用JSON模块,使用实验性标志
--experimental-json-modules
,并在Chrome 91及以上版本中使用。代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
原文:https://dmitripavlutin.com/ja...
交流
有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq44924588... 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
文章图片
推荐阅读
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 接口|axios接口报错-参数类型错误解决
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- vue|Vue面试常用详细总结
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- css|我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧()
- css|css三角的做法及其案例