import { createApp } from 'vue'import App from './App.vue'import upperFirst from 'lodash/upperFirst'import camelCase from 'lodash/camelCase'const requireComponent = require.context('./components',false,/Base[A-Z]\w+\.(vue|js)$/)const app = createApp(App)requireComponent.keys().forEach(fileName => {const componentConfig = requireComponent(fileName)const componentName = upperFirst(camelCase(fileName.replace(/^\.\/(.*)\.\w+$/, '$1')))app.component(componentName, componentConfig.default || componentConfig)})app.mount('#app')
可以在 webpack 中使用 require.context() 来创建自己的上下文(参考)。可以对某个文件夹进行搜寻。
语法:
require.context(directory,(useSubdirectories = true),(regExp = /^\.\/.*$/),(mode = 'sync'));// 例1require.context('./test', false, /\.test\.js$/);// a context with files from the test directory that can be required with a request ending with `.test.js`.// 例2require.context('../', true, /\.stories\.js$/);// a context with all files in the parent folder and descending folders ending with `.stories.js`.
使用 fileName.replace(/^\.\/(.*)\.\w+$/, '$1') ,将文件名进行替换。从 ./base-input.vue 到 baseInput ,再到 BaseInput 。使用 lodash 方法进行转换。
