导入对象?

mpe*_*pen 18 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 '../tasks/upgrade_controller';

const taskFuncs = {
    [Tasks.RENEW]: renewCreepLife,
    [Tasks.PICKUP_ENERGY]: pickupEnergy,
    [Tasks.HARVESTING]: harvestEnergy,
    [Tasks.STORING]: storeEnergy,
    [Tasks.UPGRADING]: upgradeController,
};
Run Code Online (Sandbox Code Playgroud)

有没有办法简化这个,以便我不创建这些毫无意义的临时变量名称?就像是:

// incorrect but desired syntax
const taskFuncs = {
    [Tasks.RENEW]: import '../tasks/renew_creep_life',
};
Run Code Online (Sandbox Code Playgroud)

注意,每个文件都在使用 export default function()

Cod*_*gue 10

不.该import语句没有返回值,因此它永远不能用于直接赋值给那样的变量.

此外,importexport必须在顶层声明.

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

但是,有一个HTML模块加载器规范正在处理,它允许您加载模块,如:

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

});
Run Code Online (Sandbox Code Playgroud)

但由于它是基于承诺的,你仍然无法将其内联写入类似的对象中.

如果你想要同步加载,NodeJS' require可能是你最接近的.有浏览器实现,如Webpack/Browserify /等.试图模仿行为:

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