Axel Rauschmayer 博士查看 JSON 模块,该模块已在 Chrome 91 中上线(但其他浏览器尚未支持)。 它看起来就像 ES 模块样式的导入,只是您在末尾指定了类型。
import configData from './config-data.json' assert {type: 'json'};
这有多棒? 一旦这项功能在所有浏览器中普及,我们就从“由于跨浏览器复杂性和 XMLHttpRequest
的怪异性,您几乎肯定需要使用 Ajax 库”的旅程,转变为更友好的(但您仍然需要编写一些代码) fetch API,再到一行代码就能搞定(如果只需要 JSON 数据)。
获取一些 JSON 数据在我看来应该像一行代码一样简单,现在确实如此。 我喜欢 URL 现在也可以动态生成。
我需要对此了解更多。
为什么需要
assert {type: 'json'}
?我们已经从
.json
扩展名获取了类型在我的链接文章中已解答
我不知道为什么我无法回复 Chris 的评论,所以我在此处回复。
“它们查看内容类型”,“服务器负责提供它”。 那么为什么我需要定义呢? :) 我是客户端,而不是服务器。
但是,在一个问题中,Ryosuke Niwa(Apple)和 Anne van Kesteren(Mozilla)提出,如果在导入 JSON 模块和类似的无法执行代码的模块类型时需要一些语法标记,则安全性将会得到改善,以防止响应服务器意外提供不同 MIME 类型的情况,从而导致代码意外执行。 该解决方案是在 MIME 类型之外,以某种方式指示模块是 JSON,或者通常是不应执行的模块。
一些开发人员直觉地认为可以使用文件扩展名来确定模块类型,就像在许多现有的非标准模块系统中一样。 但是,这是一个深层的 Web 架构原则,即 URL 的后缀(您可能将其视为 Web 外部的“文件扩展名”)不会导致页面解释方式的语义。 在实践中,在 Web 上,文件扩展名和 HTTP 内容类型标头之间存在广泛的不匹配。 所有这些都归结为依赖模块说明符中包含的文件扩展名/后缀作为此检查的基础是不可行的。
我们接下来可以有 HTML 导入吗?
不幸的是,似乎这艘船已经起航了