了解 ES6 命名导入
Understanding ES6 Named Imports
我正在阅读 MDN docs 上的 ES6 import
声明。
我大体上理解它是如何工作的,但想深入了解,我不理解语法的一个方面。
如MDN syntax of import
所述,这些都是将代码导入当前module/scope的不同方式:
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
s.
为什么它们是两个独立的语法定义?
为什么第二个有这个:
from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
Why are they two separate syntax definitions?
可能只是为了说明绝对模块名称也可以包含路径。
然后,"module-name"
将根据通常的模块解析规则进行解析,然后foo
和bar
将从该模块中包含的某个文件中导入。
这样,您就可以访问未从模块主文件中导出的内容。
然而,许多模块作者认为只有模块主文件的导出才构成 public API。其他一切,包括文件名和路径,都是一个实现细节,可能会随着每个版本以不可预测和不兼容的方式发生变化。
我正在阅读 MDN docs 上的 ES6 import
声明。
我大体上理解它是如何工作的,但想深入了解,我不理解语法的一个方面。
如MDN syntax of import
所述,这些都是将代码导入当前module/scope的不同方式:
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
s.
为什么它们是两个独立的语法定义?
为什么第二个有这个:
from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
Why are they two separate syntax definitions?
可能只是为了说明绝对模块名称也可以包含路径。
然后,"module-name"
将根据通常的模块解析规则进行解析,然后foo
和bar
将从该模块中包含的某个文件中导入。
这样,您就可以访问未从模块主文件中导出的内容。
然而,许多模块作者认为只有模块主文件的导出才构成 public API。其他一切,包括文件名和路径,都是一个实现细节,可能会随着每个版本以不可预测和不兼容的方式发生变化。