目前我用require.context
加载我所有的Vue组件,这用正则表达式搜索我的components
目录中的.vue
文件。这工作正常,但我想用动态导入加载异步组件。
目前,当我使用require.context
时,所有文件都被加载,所以即使我想使用动态导入,我的文件也已经被加载,什么都没有发生。
我需要一种方法来从我的require.context
调用中排除某些文件。我不能动态创建正则表达式,因为这不适用于require.context
。
// How I currently load my Vue components.
const components = require.context('@/components', true, /[A-Z]\w+\.vue$/);
components.keys().forEach((filePath) => {
const component = components(filePath);
const componentName = path.basename(filePath, '.vue');
// Dynamically register the component.
Vue.component(componentName, component);
});
// My component that I would like to load dynamically.
Vue.component('search-dropdown', () => import('./search/SearchDropdown'));
似乎唯一的方法是手动声明我所有的组件,这是一个很大的麻烦。
或者创建一个静态正则表达式,跳过名称中包含Async
的文件。这迫使我对异步组件采用特定的命名约定。同样不理想。
有没有更好的方法来做这件事?
2条答案
按热度按时间rqqzpn5f1#
t9aqgxwy2#
与Vue 2.7和Vue 3配合使用。
lazy
模式会胁迫requireContext
传回承诺。如果要使用
defineAsyncComponent
的额外选项,也可以使用defineAsyncComponent({ loader: () => promise })
。