58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
/**
|
|
* 自动引入组件
|
|
* */
|
|
import { kebabCase } from 'unplugin-vue-components';
|
|
import Components from 'unplugin-vue-components/vite';
|
|
|
|
import { ArcoResolver } from 'unplugin-vue-components/resolvers';
|
|
import IconsResolver from 'unplugin-icons/resolver';
|
|
|
|
import { getSep, getPath, setResolve, layoutsResolver } from '../utils';
|
|
|
|
export function configComponents() {
|
|
return Components({
|
|
dirs: ['src/components'],
|
|
extensions: ['vue'],
|
|
resolvers: [
|
|
ArcoResolver({
|
|
resolveIcons: {
|
|
enable: true,
|
|
},
|
|
sideEffect: true,
|
|
}),
|
|
IconsResolver({
|
|
prefix: false,
|
|
customCollections: ['i'],
|
|
enabledCollections: [],
|
|
}),
|
|
layoutsResolver(),
|
|
{
|
|
type: 'component',
|
|
resolve: (name) => {
|
|
const [prefix, folder] = kebabCase(name).split('-');
|
|
|
|
// 命名导出组件
|
|
if (prefix === 'eos') {
|
|
return {
|
|
name: name.slice(3),
|
|
from: getPath(`${getSep('src')}/components`, { folder }),
|
|
};
|
|
}
|
|
// 默认导出组件
|
|
if (prefix === 'eo') {
|
|
return setResolve(name);
|
|
}
|
|
if (prefix === 'base') {
|
|
return {
|
|
name: name.slice(4),
|
|
from: `${getSep('src')}/components/_base`,
|
|
};
|
|
}
|
|
},
|
|
},
|
|
],
|
|
directoryAsNamespace: true,
|
|
dts: './config/unplugin/components.d.ts',
|
|
});
|
|
}
|