【问题标题】:Accessing exported functions by string in ES6 modules在 ES6 模块中通过字符串访问导出的函数
【发布时间】:2015-06-14 20:22:18
【问题描述】:

考虑以下几点:

exports['handleEvent']('event');

export function handleEvent(event) {
  // do something with `event`
}

这在使用 babel 转换节点模块时有效,因为它将所有内容都粘贴在导出对象上。 vanilla ES6中是否有导出对象的概念?我希望能够使用其名称的字符串来调用方法。

我想到的一件事就是将所有功能粘贴到一个对象上并单独导出它们。另一种选择是使用一些邪恶的 eval 东西。是否有任何标准方法可以通过字符串访问当前模块中的 ES6 导出?

【问题讨论】:

    标签: module export ecmascript-6 babeljs


    【解决方案1】:

    不太确定我是否关注...

    这里有几个 ES6 模块导入 + 导出的例子。它们中的任何一个都符合您的要求吗?

    示例 1

    制作人:

    export function one() { return 1 };
    export function two() { return 2 };
    

    消费者:

    import {one, two} from 'producer';
    
    one();
    two();
    

    示例 2

    制作人:

    export function one() { return 1 };
    export function two() { return 2 };
    

    消费者:

    import * as producer from 'producer';
    
    producer.one(); // or producer['one']()
    producer.two();
    

    示例 3

    制作人:

    export default {
      one() { return 1 },
      two() { return 2 }
    };
    

    消费者:

    import producer from 'producer';
    
    producer.one(); // or producer['one']()
    producer.two();
    

    示例 4

    制作人:

    export default {
      one() { return 1 },
      two() { return 2 }
    };
    

    消费者:

    import {one, two} from 'producer';
    
    one();
    two();
    

    示例 5

    制作人:

    export default function() { return 1 };
    export function two() { return 2 };
    

    消费者:

    import one, {two} from 'producer';
    
    one();
    two();
    

    【讨论】:

    • 示例二可能会有所帮助,producer[dynamicPropertyName]() 正是 OP 正在寻找的。但是您可以将一个模块导入到自身中(在生产者模块中使用该语法)吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2017-12-09
    • 2020-09-05
    相关资源
    最近更新 更多