了解ES6命名导入

时间:2018-11-04 00:56:48

标签: javascript ecmascript-6 es6-modules

我正在阅读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,因此必须导入名为export的文件。


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

为什么第二个有这个:

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

1 个答案:

答案 0 :(得分:3)

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

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

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

然后,将根据常规模块解析规则解析"module-name",然后从该模块中包含的某个文件中导入foobar

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

但是,许多模块作者认为只有来自模块主文件的导出才构成公共API。其他所有内容,包括文件名和路径,都是一个实现细节,对于每个发行版来说,它可能都以无法预测和不兼容的方式更改。