项目简介
- 主工程:Vue2+Webpack
- 子工程:Vue3+Vite
子工程配置
- 在App.vue中添加样式命名空间,Element-Puls提供的组件
<template>
<el-config-provider namespace="ep" :locale="locale">
<router-view></router-view>
</el-config-provider>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import { ElConfigProvider } from 'element-plus'
import localeZH from 'element-plus/es/locale/lang/zh-cn'
export default defineComponent({
components: {
ElConfigProvider,
},
setup() {
return {
locale: localeZH,
}
},
})
</script>
- 新建一个index.scss文件(位置无要求)
@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
$namespace: 'ep'
);
- 配置vite.config.ts
import {ConfigEnv, defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import qiankun from 'vite-plugin-qiankun'
import Components from 'unplugin-vue-components/vite'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import {resolve} from 'path';
import {createStyleImportPlugin, VxeTableResolve} from "vite-plugin-style-import";
import AutoImport from 'unplugin-auto-import/vite';
import {ElementPlusResolver} from "unplugin-vue-components/resolvers";
const pathResolve = (dir: string) => {
return resolve(__dirname, '.', dir);
};
const alias: Record<string, string> = {
'/@': pathResolve('./src/'),
};
const viteConfig = defineConfig((mode: ConfigEnv) => {
const env = loadEnv(mode.mode, process.cwd());
console.log(mode.command)
return {
plugins: [
vue(),
vueSetupExtend(),
AutoImport({
imports: ['vue', 'vue-router', 'pinia'],
dts: './auto-imports.d.ts',
}),
createStyleImportPlugin({
resolves: [VxeTableResolve()],
}),
qiankun('app-vue3', {
useDevMode: true
}),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
}),
],
root: process.cwd(),
resolve: {alias},
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
server: {
host: '0.0.0.0',
port: 7001,
origin: 'http://localhost:7001',
open: true,
hmr: true,
headers: {
'Access-Control-Allow-Origin': '*'
}
},
build: {
outDir: 'dist',
chunkSizeWarningLimit: 1500,
rollupOptions: {
output: {
entryFileNames: `assets/[name].[hash].js`,
chunkFileNames: `assets/[name].[hash].js`,
assetFileNames: `assets/[name].[hash].[ext]`,
compact: true,
manualChunks: {
vue: ['vue', 'vue-router', 'pinia'],
},
},
},
},
css: {
preprocessorOptions: {
css: {
charset: false
},
scss: {
additionalData: `@use "/src/theme/element/index.scss" as *;`,
},
}
},
}
})
export default viteConfig;