ES6中的模块导入和导出中的模块说明符

11
我对这些语句中的模块说明符感到困惑,不确定它们所指的是什么。
export {bar} from "foo";

import {bar} from "foo";

"foo" 是指什么?它不可能是一个文件,因为它应该像 "./foo" 这样。如果它不是一个文件,我认为它应该是一个 ID。那么这个 ID 是如何定义的呢?

我正在从一个 js 文件中导出,但导入会成为 Firefox 浏览器中内联 html 脚本 (type="module") 的一部分。

已经验证浏览器版本 (以及浏览器设置) 可以使用 es6 模块。

提前致谢。

1个回答

18

ES6不指定模块说明符指的是什么。
它只是一个标识符。没有更多内容。

将这些标识符解析为实际模块留给环境来处理。装载程序可以将它们解释为相对文件路径、全局ID、npm模块名称或其他任何内容。

在浏览器中,<script type="module">花费了一些时间来指定,但现在已经到了这里。目前,"foo"的模块说明符无效,浏览器会忽略该模块,因为它不知道该怎么做。它需要一些解析为URL以加载的东西。Jake Archibald 简明扼要地概括了:

"裸"导入说明符目前不受支持。有效的模块规范必须与以下之一匹配:

  • 完整的非相对URL。像这样的: new URL(moduleSpecifier) 不会报错。
  • /开头。
  • ./开头。
  • ../开头。

其他规范保留用于将来使用,例如导入内置模块。


2
你有什么提示可以告诉我如何找出Chrome加载器允许模块指示符的“值”?一个包含对导出对象引用的对象的引用似乎是一个合理的模块指示符。 - Fred Finkle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接