【发布时间】:2019-12-15 18:41:45
【问题描述】:
是否可以动态导入命名导出? 我有一个文件banana.js,其中包含数百个命名导出。我想按需导入它们。这可能吗?如果是,它会只加载那个导出而不是全部吗?
我知道可以从单个文件中动态导入它们,但我希望它们在同一个文件中。
下面的例子..
// banana.js
export const banana_1 = {
..
}
export const banana_2 = {
..
}
// main.js
const currentPage = 1
async getSomething(){
let { `banana_${currentPage}` } = await import('./banana.js');
const foo = `banana_${currentPage}`
}
我正在使用 Vue.js
【问题讨论】:
-
这些对象的有效载荷是多少?它们是 JSON 对象还是类定义?如果它们是 json 对象(或类似对象),我可能会建议使用 mongodb 之类的数据存储解决方案。这样您就可以通过查询动态加载这些对象。如果这些是类,据我所知 require / import 同步读取的内容是文件。
-
“它会只加载那个导出而不是全部吗?” - 它总是会加载整个模块,无论您在任何地方导入多少个导出变量。
-
let { `banana_${currentPage}` } =不是有效的解构语法。但是是的,await import(…)将返回一个命名空间对象,您可以在其上dynamically access properties in the usual way。使用例如const {["banana_"+currentPage]: foo} = …. -
@Bergi 感谢您的反馈。所以总而言之,动态加载这些以提高速度是没有意义的。
-
@PerThomasson 如果您想通过仅动态加载部件来提高性能,则需要将它们拆分为单独的文件。然后你可以只加载你需要的那些模块。