了解 ES6 命名导入

qar*_*dso 6 javascript ecmascript-6 es6-modules

我正在阅读MDN 文档import上的ES6声明。

我大致了解它是如何工作的,但想要更深入地研究,我不了解语法的一个方面。

如 的MDN 语法所述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");
Run Code Online (Sandbox Code Playgroud)

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

import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
Run Code Online (Sandbox Code Playgroud)

这两者不会完全一样吗?我们没有导入 default export,因此我们必须导入 named exports。


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

为什么第二个有这个:

from "module-name/path/to/specific/un-exported/file";
Run Code Online (Sandbox Code Playgroud)

art*_*tem 5

import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
Run Code Online (Sandbox Code Playgroud)

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

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

然后,"module-name"将根据通常的模块解决规则来解决,然后foobar将从包含在模块内的一些文件中导入。

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

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