提问人:kbrdn1 提问时间:11/17/2023 更新时间:11/17/2023 访问量:33
Vuex Store 初始化中顶层 Await 的 Vite 构建错误
Vite Build Error with Top-Level Await in Vuex Store Initialization
问:
我目前正在使用 Vuex 和 Vite 进行 Vue 3 项目。我在我的存储.js文件中有一个Vuex模块的动态导入。下面是相关代码:
import lastStringElement from "../utils/lastStringElement";
import camelToPascal from "../utils/camelToPascal";
import { createStore } from 'vuex';
const modulesArrayToObject = async () => {
const modules = import.meta.glob('../modules/*/*/*.js');
let modulesObject = {};
for (const [key, value] of Object.entries(modules)) {
const storeNamespace = lastStringElement(key, '/').replace('.js', '');
const storeName = `${camelToPascal(storeNamespace)}Store`
//> keep `await` for dynamic import store modules in VueX
const { [storeNamespace]: ImportedModule } = await import(
/* @vite-ignore */
`../modules/${key.replace('../modules', '')}`
);
modulesObject[storeName] = ImportedModule;
}
return modulesObject;
}
const createStoreWithModules = async () => {
const modules = await modulesArrayToObject();
return createStore({
modules
});
};
//* This is a workaround for vite dev process
const store = await createStoreWithModules();
//* This is a workaround for vite build process
//! encapsulate the store in a function to avoid `vite build` error
//! but this will cause a warning in the console in dev process
//? didn't find a better solution for this at the moment
/*
; let store;
; (async () => {
; store = await createStoreWithModules();
; })();
*/
export default store;
这在开发中工作正常,但是当我尝试使用 vite build 构建项目时,出现以下错误:
Transform failed with 1 error:
modules/app.js:129719:14: ERROR: Top-level await is not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari14" + 3 overrides)
我知道该错误是由于在我的存储.js文件中使用了顶级await,这在目标环境中不受支持。但是,我需要使用 await 来确保在创建 Vuex 商店之前导入所有模块。
我试图将存储初始化封装在异步 IIFE 中,但这会导致在开发过程中在控制台中出现警告。
有没有更好的方法来处理这种情况?如何在不遇到此问题的情况下将动态导入与 Vuex 和 Vite 一起使用?任何帮助将不胜感激。
答: 暂无答案
评论
let store