【问题标题】:Understanding ES6 Named Imports理解 ES6 命名导入
【发布时间】:2019-04-07 18:40:40
【问题描述】:

我正在阅读 MDN docs 上的 ES6 import 语句。

我大致了解它的工作原理,但想深入了解,我不了解语法的一个方面。

正如MDN syntax of import 中所述,这些都是将代码导入当前模块/范围的不同方式:

import defaultExport from "module-name";
import * as name from "module-name";
import { export } from "module-name";
import { export as alias } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
var promise = import("module-name");

我想了解的是这两行之间的区别:

import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";

这两个不是完全相同吗?我们没有导入默认的export,因此我们必须导入名为exports。


为什么它们是两个独立的语法定义?

为什么第二个有这个:

from "module-name/path/to/specific/un-exported/file";

【问题讨论】:

  • 我认为它们在第一行被导出,而在第二行它们根本没有被导出。
  • 我想这是为了表明您可以指定模块内文件的路径,而不仅仅是模块名称
  • @Badrush 但是如果关键是它们都可以import 对象,那么为什么要将它们分成单独的语法呢?第二个有什么不同?
  • 我认为这是因为 foo 和 bar 在第二个中没有导出。第一个,我很确定该文件有多个导出。

标签: javascript ecmascript-6 es6-modules


【解决方案1】:
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";

为什么它们是两个不同的语法定义?

可能只是为了说明绝对模块名称也可以包含路径。

然后,"module-name" 将根据通常的模块解析规则进行解析,然后从该模块中包含的某个文件导入 foo 和 bar。

这样,您可以访问未从模块主文件导出的内容。

但是,许多模块作者认为只有从模块主文件导出才构成公共 API。其他所有内容,包括文件名和路径,都是一个实现细节,可能会随着每个版本以不可预测且不兼容的方式发生变化。

【讨论】:

  • 有道理,谢谢。我没有得到什么构成“未导出”文件。每个文件都可以有一些命名的导出,或者一个export default。这就是"module-name" 的全部内容。那么"module-name" 和"module-name" 中的一些深层嵌套文件有什么不同呢?他们都以相同的方式导出一些东西。这就是让我想知道为什么它有两个不同的定义。
  • 我认为没有“未导出”文件之类的东西。有一个主文件(由package.json 文件中的main 属性指示的文件,或index.js 如果该属性不存在)和所有其他文件。当您仅通过模块名称引用模块时,它会自动解析为模块主文件。当您引用模块中的任何其他文件时,您只能靠自己 - 您依赖于模块的内部文件布局。
  • 所以,我认为他们为此示例选择的名称 - "un-exported/file" - 有点不幸。文件没有被导出,只有文件中定义的符号被导出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2015-10-15
  • 2022-01-14
相关资源
最近更新 更多