26 lines
823 B
JavaScript
26 lines
823 B
JavaScript
import upperFirst from 'lodash/upperFirst'
|
|
import camelCase from 'lodash/camelCase'
|
|
|
|
const requireComponent = require.context('./', true, /\.vue$/)
|
|
|
|
const vueFileRxp = /\.vue$/
|
|
|
|
export default app => {
|
|
requireComponent.keys().forEach(fileName => {
|
|
const filePath = fileName.replace(/^\.\//, '')
|
|
|
|
if (!filePath.split('/').every((path, index, arr) => {
|
|
const char = path.charAt(0)
|
|
return vueFileRxp.test(path) || char.toUpperCase() !== char || arr[index + 1] == 'index.vue'
|
|
})) return
|
|
|
|
const componentConfig = requireComponent(fileName)
|
|
|
|
let componentName = upperFirst(camelCase(filePath.replace(/\.\w+$/, '')))
|
|
|
|
if (componentName.endsWith('Index')) componentName = componentName.replace(/Index$/, '')
|
|
|
|
app.component(componentName, componentConfig.default || componentConfig)
|
|
})
|
|
}
|