1、webpack中使用require.context
require.context(directory, useSubdirectories, regExp)
directory: 文件路径
useSubdirectories: 是否查找子目录
regExp: 匹配正则
export default {
install(app: App): void {
const comps = require.context('./', true, /index\.vue$/)
comps.keys().forEach((key) => {
const compName = 'm-' + key.replace('./', '').split('/')[0]
app.component(compName, comps(key).default)
})
}
}
2、vite中使用import.meta.glob
// const components = import.meta.glob('./*/index.vue')
// 转译为
// const modules = {
// './icon/index.vue':()=>import('./icon/index.vue')
// }
export default {
install(app:App){
const components = import.meta.glob('./*/index.vue')
for(const [key,val] of Object.entries(components)){
const componentName = 'm-'+key.replace('./','').split('/')[0]
app.component(componentName,defineAsyncComponent(val))
}
}
}
3、webpack中批量导入svg矢量图标
// 导入所有svg图标
const svgRequire = require.context('./svg', false, /\.svg$/)
svgRequire.keys().forEach((svgIcon) => svgRequire(svgIcon))
安装svg-sprite-loader,在vue.config.js中配置
chainWebpack: (config) => {
config.module.rule('svg').exclude.add(resolve('src/icons')).end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
},
使用时
const iconName = computed(() => `#icon-${props.icon}`)
<svg v-else class="svg-icon" :class="className" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
4、在vite中批量导入svg使用vite-plugin-svg-icons的createSvgIconsPlugin函数