让我们从一个例子开始:
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',
};
N.B。每个文件都使用export default function()
答案 0 :(得分:10)
没有。 import
语句没有返回值,因此它永远不能用于直接赋值给那样的变量。
此外,import
和export
必须在顶级声明。
这对ES6来说是不可能的,并且可能在可预见的未来(ES2016 +)保持这种状态。
但是,正在处理HTML Module Loader spec,您可以加载以下模块:
System.import('../tasks/renew_creep_life')
.then(renewCreepLife => {
});
但是因为它是基于承诺的,所以你仍然无法在这样的对象中内联编写它。
如果您想要同步加载,NodeJS'require
可能是您最接近的。有浏览器实现,如Webpack / Browserify /等。试图模仿行为:
const taskFuncs = {
[Tasks.RENEW]: require('../tasks/renew_creep_life').default
};