Ecmascript 6 导入到对象中?

Ecmascript 6 导入到对象中?,ecmascript-6,Ecmascript 6,让我们从一个例子开始: import renewCreepLife from '../tasks/renew_creep_life'; import harvestEnergy from '../tasks/harvest_energy'; import pickupEnergy from '../tasks/pickup_energy'; import storeEnergy from '../tasks/store_energy'; import upgradeController from

让我们从一个例子开始:

import renewCreepLife from '../tasks/renew_creep_life';
import harvestEnergy from '../tasks/harvest_energy';
import pickupEnergy from '../tasks/pickup_energy';
import storeEnergy from '../tasks/store_energy';
import upgradeController from '../tasks/upgrade_controller';

const taskFuncs = {
    [Tasks.RENEW]: renewCreepLife,
    [Tasks.PICKUP_ENERGY]: pickupEnergy,
    [Tasks.HARVESTING]: harvestEnergy,
    [Tasks.STORING]: storeEnergy,
    [Tasks.UPGRADING]: upgradeController,
};
有没有办法简化这个过程,这样我就不会创建这些毫无意义的临时变量名?比如:

// incorrect but desired syntax
const taskFuncs = {
    [Tasks.RENEW]: import '../tasks/renew_creep_life',
};

注意:这些文件中的每个文件都使用了
export default function()

否。
import
语句没有返回值,因此它不能用于直接分配给这样的变量

此外,
导入
导出
必须在顶层声明

这在ES6中是不可能的,并且在可预见的未来(ES2016+)可能会保持这种状态

但是,有一个正在开发的应用程序允许您加载以下模块:

System.import('../tasks/renew_creep_life')
.then(renewCreepLife => {

});
但由于它是基于承诺的,所以您仍然无法将其内联写入这样的对象中

如果需要同步加载,NodeJS的
require
可能是最接近的。有一些浏览器实现,如Webpack/Browserify/等,试图模仿以下行为:

const taskFuncs = {
    [Tasks.RENEW]: require('../tasks/renew_creep_life').default
};

不是ES6,但由于您可能正在使用webpack或browserify之类的工具,您可以使用
require
,这使您能够做到这一点。顺便说一句,在我看来,您的原始解决方案是明确、清晰、简洁的,更重要的是可以静态分析。我个人会保留你所拥有的。它必须是
require(“../tasks/renew\u screw\u life”)。默认值是
那么,否?@mpen在true CommonJS中是的,你是对的(一些浏览器实现不是100%兼容的,例如Babel 5)-我会更新