【问题标题】:How to export default Object.freeze in dynamic import?如何在动态导入中导出默认的 Object.freeze?
【发布时间】:2020-06-26 22:22:42
【问题描述】:

我正在尝试在动态导入的模块中导出冻结的对象,但它失败了。

我的主要模块是:

import ('./hello.mjs').then(function (o) {
    o.hello();
});

我的导入模块 hello.mjs 有这样的代码:

function hello () {
    console.log('Hello');
}

export default Object.freeze({ hello });

程序在控制台中失败并出现此错误:

TypeError: o.hello is not a function at main.mjs:2

但是,如果我使用简单的导出,像这样:

function hello () {
    console.log('Hello');
}

export { hello };

...然后就可以了。导出默认冻结对象适用于非动态模块导入。为什么动态模块导入的行为不同,我可以做些什么来纠正这个问题?

【问题讨论】:

    标签: javascript dynamic import module export


    【解决方案1】:

    动态导入的promise的实现值是模块的module namespace object。 (请参阅规范中的FinishDynamicImport。)要访问默认导出,请在其上使用属性default,也许通过解构:

    import ('./hello.mjs').then(function ({default: o}) {
    // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^
        o.hello();
    });
    

    【讨论】:

    • FWIW,我的新书几个月后就要出版了。我将在第 13 章中详细介绍模块,包括动态导入。请参阅我的个人资料以获取链接等。
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2021-09-15
    • 2017-02-06
    相关资源
    最近更新 更多