import Vue from 'vue'
|
|
import baseMixin from 'uni-mixins/base'
|
import animation from 'uni-mixins/animation'
|
|
const requireComponents = [
|
// baseComponents
|
require.context('./', true, /index\.vue$/),
|
require.context('../../../platforms/' + __PLATFORM__ + '/view/components', true, /index\.vue$/)
|
]
|
|
let elements = {}
|
|
if (__PLATFORM__ === 'app-plus') {
|
// TODO use full polyfill
|
require('uni-core/helpers/custom-elements-define')
|
const module = require('../../../platforms/app-plus/view/elements/index.js')
|
elements = module.default || module
|
for (const key in elements) {
|
// TODO use kebabCase
|
customElements.define(`uni-${key.toLowerCase()}`, elements[key])
|
}
|
}
|
|
requireComponents.forEach((components, index) => {
|
components.keys().forEach(fileName => {
|
// 获取组件配置
|
const componentModule = components(fileName)
|
|
const componentConfig = componentModule.default || componentModule
|
|
componentConfig.mixins = componentConfig.mixins ? [].concat(baseMixin, componentConfig.mixins) : [baseMixin]
|
|
if (!componentConfig.functional) {
|
componentConfig.mixins.push(animation)
|
}
|
|
componentConfig.name = 'VUni' + componentConfig.name
|
|
componentConfig.isReserved = true
|
|
// 全局注册组件
|
Vue.component(componentConfig.name, componentConfig)
|
})
|
})
|