1. import { createApp } from 'vue'
    2. import App from './App.vue'
    3. import upperFirst from 'lodash/upperFirst'
    4. import camelCase from 'lodash/camelCase'
    5. const requireComponent = require.context(
    6. './components',
    7. false,
    8. /Base[A-Z]\w+\.(vue|js)$/
    9. )
    10. const app = createApp(App)
    11. requireComponent.keys().forEach(fileName => {
    12. const componentConfig = requireComponent(fileName)
    13. const componentName = upperFirst(
    14. camelCase(fileName.replace(/^\.\/(.*)\.\w+$/, '$1'))
    15. )
    16. app.component(componentName, componentConfig.default || componentConfig)
    17. })
    18. app.mount('#app')

    可以在 webpack 中使用 require.context() 来创建自己的上下文(参考)。可以对某个文件夹进行搜寻。
    语法:

    1. require.context(
    2. directory,
    3. (useSubdirectories = true),
    4. (regExp = /^\.\/.*$/),
    5. (mode = 'sync')
    6. );
    7. // 例1
    8. require.context('./test', false, /\.test\.js$/);
    9. // a context with files from the test directory that can be required with a request ending with `.test.js`.
    10. // 例2
    11. require.context('../', true, /\.stories\.js$/);
    12. // a context with all files in the parent folder and descending folders ending with `.stories.js`.

    使用 fileName.replace(/^\.\/(.*)\.\w+$/, '$1') ,将文件名进行替换。从 ./base-input.vuebaseInput ,再到 BaseInput 。使用 lodash 方法进行转换。