91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
import vue from '@vitejs/plugin-vue'
|
|
import vueJsx from '@vitejs/plugin-vue-jsx'
|
|
import { resolve } from 'path'
|
|
import type { ConfigEnv, ProxyOptions, UserConfigExport } from 'vite'
|
|
import { loadEnv } from 'vite'
|
|
import { viteMockServe } from 'vite-plugin-mock'
|
|
import MarkDownPlugin from 'vite-plugin-vue-markdown'
|
|
|
|
// https://vitejs.dev/config/
|
|
export default ({ mode, command }: ConfigEnv): UserConfigExport => {
|
|
const { VITE_APP_PORT, VITE_APP_PROXY, VITE_MOCK } = loadEnv(mode, process.cwd())
|
|
|
|
const createProxy = (proxyList) => {
|
|
const ret = {} as Record<string, ProxyOptions>
|
|
for (const [prefix, target] of proxyList) {
|
|
ret[prefix] = {
|
|
target: target,
|
|
changeOrigin: true,
|
|
rewrite: (path) => path.replace(new RegExp(`^${prefix}`), '')
|
|
}
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
return {
|
|
plugins: [
|
|
vue({
|
|
include: [/\.vue$/, /\.md$/] // <--
|
|
}),
|
|
vueJsx(),
|
|
viteMockServe({
|
|
mockPath: 'mock',
|
|
logger: true,
|
|
localEnabled: command === 'serve',
|
|
prodEnabled: VITE_MOCK === 'true',
|
|
injectCode: `
|
|
import { setupProdMockServer } from '../mock/mockProdServer';
|
|
setupProdMockServer();
|
|
`
|
|
}),
|
|
MarkDownPlugin({
|
|
markdownItSetup(md) {
|
|
md.use(require('./build/toc.js'))
|
|
}
|
|
})
|
|
],
|
|
base: './',
|
|
resolve: {
|
|
alias: {
|
|
// 路径别名
|
|
'@': resolve(__dirname, 'examples'),
|
|
'open-data-v': resolve(__dirname, 'src'),
|
|
docs: resolve(__dirname, 'docs')
|
|
},
|
|
// 使用路径别名时想要省略的后缀名,官方不建议将.vue文件省略后缀
|
|
extensions: ['.js', '.ts', '.tsx', '.jsx']
|
|
},
|
|
server: {
|
|
// 是否开启 https
|
|
https: false,
|
|
port: Number(VITE_APP_PORT),
|
|
host: '0.0.0.0',
|
|
open: false,
|
|
proxy: createProxy(JSON.parse(VITE_APP_PROXY)),
|
|
fs: {
|
|
allow: ['..'],
|
|
strict: false
|
|
},
|
|
cors: true
|
|
},
|
|
build: {
|
|
target: 'es2022',
|
|
chunkSizeWarningLimit: 1500
|
|
},
|
|
css: {
|
|
preprocessorOptions: {
|
|
less: {
|
|
modifyVars: {
|
|
hack: `true; @import (reference) "${resolve('examples/css/index.less')}";`
|
|
},
|
|
javascriptEnabled: true
|
|
}
|
|
},
|
|
modules: {
|
|
localsConvention: 'camelCase'
|
|
}
|
|
}
|
|
}
|
|
}
|