【问题标题】:Importing aggregates either through the aggregate name or through part names通过聚合名称或部件名称导入聚合
【发布时间】:2019-07-09 08:55:32
【问题描述】:

以下工作非常好

// libPart1.js
export default 'file part1.js';

// libPart2.js
export default 'file part2.js';

// lib.js
import libPart1 from './libPart1';
import libPart2 from './libPart2';

export default {
    libPart1, libPart2
}

// main1.js
import lib from './lib';

console.dir(lib.libPart1);
console.dir(lib.libPart2);

我也可以使用命名导入:

// lib.js
export {default as libPart1} from './libPart1';
export {default as libPart2} from './libPart2';

// main2.js
import {libPart1, libPart2} from './lib';

console.dir(libPart1);
console.dir(libPart2);

尽管如此,我想以main1.jsmain2.js 都能正常工作的方式编写lib.js

如果这很重要,我正在使用 webpack。

【问题讨论】:

    标签: javascript webpack ecmascript-6 es6-modules


    【解决方案1】:

    不,不要默认导出对象字面量。始终使用命名导出。要使用lib 对象启用样式,请在要导入模块的main1.js 文件中使用命名空间导入。不要更改出口申报。

    // lib.js
    export {default as libPart1} from './libPart1';
    export {default as libPart2} from './libPart2';
    

    // main1.js
    import * as lib from './lib';
    //     ^^^^^^^^
    console.dir(lib.libPart1);
    console.dir(lib.libPart2);
    

    // main2.js
    import {libPart1, libPart2} from './lib';
    
    console.dir(libPart1);
    console.dir(libPart2);
    

    【讨论】:

    • 感谢您的回答。但是,必须有一种方法可以使其工作,因为main1.jsmain2.js 存在于我的代码库中并且它们可以工作。唯一的区别是lib.jslibPart1.jslibPart2.js 都使用 AMD。
    • 如果 lib.js 使用 AMD,那么可能是您的转译器的宽大处理允许这两种样式。
    • 够好了!谢谢你。正如我们所说,我正在重写数千个 JS 文件以在任何地方使用命名导入 :-)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多