比如以下代码:
import x1 from "xxx"
import x2 from "xxx"
import x3 from "xxx"
import的变量名称是有规律的,我想动态去获取这些变量,比如:
[1,2,3].forEach(i => {...})
eval('x1')
和new Function('return x1')
这样写不行,是写的有问题吗?或者有什么其他的方法?
比如以下代码:
import x1 from "xxx"
import x2 from "xxx"
import x3 from "xxx"
import的变量名称是有规律的,我想动态去获取这些变量,比如:
[1,2,3].forEach(i => {...})
eval('x1')
和new Function('return x1')
这样写不行,是写的有问题吗?或者有什么其他的方法?
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
静态
import
语句不能放在可执行的语句后面,所以用可执行的语句动态生成其语句中的模块名是不可能的(自定义babel
插件除外)。由于这个限制,静态
import
不能做到运行时的按需引入。不过
import x1 from 'xxx'
是导入默认模块,导入的时候是可以随便命名的,所以没必要纠结这个模块名(如果题主关心的是模块名,而不是动态导入的话),写成“李狗蛋”也不会有问题。或者你就先
import
进来,然后给它重新命名,有点多此一举。不过动态 import 是可以按需引入的,引入后返回一个
Promise
,在回调里你可以随心所欲地重命名模块,配置下构建工具或者升级浏览器就可以:(语法大致如此,不保证运行结果正确)