【问题标题】:When does an export break static module resolution in ES6/2015什么时候导出会破坏 ES6/2015 中的静态模块解析
【发布时间】:2015-05-26 21:46:30
【问题描述】:

考虑下面的代码。

//------ lib.js ------
export const willThisBreakStaticModuleResolution = {iAm: 'a literal object'};

export default function() {...}

//------ main.js ------
import { willThisBreakStatic } from 'lib.js';
...

lib.js 中的命名导出会破坏静态模块解析,还是只有在默认导出对象时才会发生这种情况?

更新

“中断静态解析”是指如果“系统”中的所有其他模块也将在运行时动态解析,而不是在编译时静态解析。

【问题讨论】:

    标签: javascript module static ecmascript-6


    【解决方案1】:

    lib.js 中的命名导出会破坏静态模块解析,还是只有在默认导出对象时才会发生这种情况?

    您似乎假设命名导出以某种方式成为默认导出的“属性”。情况并非如此 (*),因此这不会影响静态分辨率。

    模块的导出通过ExportEntrys 进行描述,每个命名导出以及默认导出都有一个条目。

    spec 包含不同 export 声明的示例。


    *:当然,转译器目前可能会这样做以模拟具有 ES5 语法的模块,但这是实现的限制。

    【讨论】:

    • 感谢您的回答。那么,它会破坏静态分辨率吗?
    • 但这会吗? export const myFunc = function() {...} export default { afunction: myfunc }
    • 不,为什么?也许我不清楚您所说的“打破静态分辨率”是什么意思。
    • 因为如果这是在模块 2 中导入的:import funcs from module1, then funcs.anotherFunc = function() {...}` 将在模块 3 中从模块 1 导入函数: funcs.anotherFunc() // works!!!.
    • 啊。我想我当时误解了你的问题。是的,如果某个对象导出了一个对象,并且该对象发生了变异,那么导入该模块的所有其他对象也将看到变异的对象。这就是对象的工作方式,模块不会改变这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2013-02-28
    • 2016-09-06
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多