You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
3.3 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { getPluginsList } from './build/plugins';
import { include, exclude } from './build/optimize';
import { type UserConfigExport, type ConfigEnv, loadEnv } from 'vite';
import { root, alias, wrapperEnv, pathResolve, __APP_INFO__ } from './build/utils';
import copy from 'rollup-plugin-copy';
import path from 'path';
export default ({ mode }: ConfigEnv): UserConfigExport => {
const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } = wrapperEnv(loadEnv(mode, root));
return {
base: VITE_PUBLIC_PATH,
root,
resolve: {
alias,
},
// 服务端渲染
server: {
// 端口号
port: VITE_PORT,
host: '0.0.0.0',
// 本地跨域代理 https://cn.vitejs.dev/config/server-options.html#server-proxy
proxy: {},
// 预热文件以提前转换和缓存结果,降低启动期间的初始页面加载时长并防止转换瀑布
warmup: {
clientFiles: ['./index.html', './src/{views,components}/*'],
},
},
plugins: getPluginsList(VITE_CDN, VITE_COMPRESSION),
// https://cn.vitejs.dev/config/dep-optimization-options.html#dep-optimization-options
optimizeDeps: {
include,
exclude,
},
// 生产环境保留console(drop数组只有两个选项console和debugger填入哪个值就代表生产环境去掉哪个)
esbuild: {
drop: ['debugger'],
},
build: {
// https://cn.vitejs.dev/guide/build.html#browser-compatibility
target: 'es2015',
sourcemap: false,
// 消除打包大小超过500kb警告
chunkSizeWarningLimit: 4000,
rollupOptions: {
plugins: [
copy({
targets: [
{
src: 'demoHtml/**/*',
dest: path.join(process.cwd(), 'dist', 'demoHtml'),
},
],
overwrite: true,
hook: 'closeBundle',
// 显示详细日志
verbose: true,
copySync: true,
flatten: false,
}),
],
input: {
index: pathResolve('./index.html', import.meta.url),
// layoutHtml: pathResolve('./demoHtml/layout.html', import.meta.url),
// iframeHtml: pathResolve('./demoHtml/iframe.html', import.meta.url),
// ocrHtml: pathResolve('./demoHtml/ocr/ocr.html', import.meta.url),
// qrcodeHtml: pathResolve('./demoHtml/qrcode/index.html', import.meta.url),
},
// 静态资源分类打包
output: {
chunkFileNames: 'static/js/[name]-[hash].js',
entryFileNames: 'static/js/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
},
},
},
define: {
__INTLIFY_PROD_DEVTOOLS__: false,
__APP_INFO__: JSON.stringify(__APP_INFO__),
},
};
};