目前我正在使用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
的文件。这迫使我对异步组件采用某种命名约定。也不理想。
有没有更好的方法来做这件事?
答案 0 :(得分:1)
const requireContext = require.context('./components', false, /.*\.vue$/)
const dynamicComponents = requireContext.keys()
.map(file =>
[file.replace(/(^.\/)|(\.vue$)/g, ''), requireContext(file)]
)
.reduce((components, [name, component]) => {
components[name] = component.default || component
return components
}, {})