在Node中测试以下模块布局,看起来本地导出的定义总是在名称冲突的情况下替换外部导出的定义(参见f1 in B.js)。
A.js
export const f1 = 'A'
B.js
export * from './A.js'
export const f1 = 'B'
C.js
import * as A from './A.js'
import * as B from './B.js'
console.log(A.f1)
console.log(B.f1)
> node C.js
// A
// B
这是规矩吗?我还没有在Ecmascript规范中找到一些关于如何管理这个的东西。
进出口订单重要吗?
您认为这是扩展模块重载函数和/或添加新函数的可靠方法吗?
发布于 2021-03-08 08:33:35
这是规矩吗?我还没有在Ecmascript规范中找到一些关于如何管理这个的东西。
是的,本地出口优先。实际上,这就是规范规范
具体来说,在您的示例中,starExport
是以下内容的一部分:
For each ExportEntry Record e in module.[[StarExportEntries]], do
(...)
c. Let starNames be requestedModule.GetExportedNames(exportStarSet).
d. For each element n of starNames, do
i. If SameValue(n, "default") is false, then
1. If n is not an element of exportedNames, then
a. Append n to exportedNames.
所以,回答你的第二个问题:
您认为这是扩展模块重载函数和/或添加新函数的可靠方法吗?
是的,它是可靠的,因为它是在标准中指定的。
https://stackoverflow.com/questions/66533367
复制相似问题