import { fileURLToPath, URL } from 'node:url';
import { createRequire } from 'node:module';
import { defineConfig,loadEnv,splitVendorChunkPlugin } from 'vite';
import vue from '@vitejs/plugin-vue';
import { babel } from '@rollup/plugin-babel';
import svgLoader from 'vite-svg-loader';
import { visualizer } from 'rollup-plugin-visualizer'; //打包大小分析(stats.html)
import viteCompression from 'vite-plugin-compression'; //打包压缩
// https://vitejs.dev/config/
export default defineConfig(({command,mode})=>{
const env = loadEnv(mode, process.cwd(), '');
const isDev = env.NODE_ENV!=="production";
return {
plugins: [
vue(),
babel({
babelrc: false,
extensions: ['.ts', '.tsx'],
plugins: [['@babel/plugin-transform-runtime', { useESModules: true }]],
presets: [
[
'@babel/preset-env',
{
targets: ['chrome 87', 'safari 13', 'firefox 78', 'edge 88'],
useBuiltIns: 'usage',
bugfixes: true,
loose: false,
modules: false,
corejs: createRequire(import.meta.url)('core-js/package.json').version,
shippedProposals: true,
ignoreBrowserslistConfig: true,
},
],
],
exclude: 'node_modules/**',
babelHelpers: 'runtime',
}),
splitVendorChunkPlugin(),
// VueI18nPlugin({
// /* options */
// // locale messages resource pre-compile option
// include: ['./src/**/lang/**/*.json', './src/**/lang/*.json'],
// }),
// svgLoader({
// svgoConfig: {
// plugins: [
// {
// name: 'preset-default',
// params: {
// overrides: {
// removeViewBox: false, // 禁用插件
// },
// },
// },
// {
// name: 'removeAttrs',
// params: {
// attrs: '(width|height|fill)', // 清除svg属性
// },
// },
// ],
// },
// }),
visualizer(),
viteCompression(),
],
//全局变量得这样写,否则会报not defined
define: {
__APP_ENV__: isDev?'"devlopment"':'"production"'
},
// 打包配置
build: {
outDir: 'dist', //指定输出路径
assetsDir: 'assets', // 指定生成静态资源的存放路径
//生产环境移除console
minify: 'terser', // 混淆器,terser构建后文件体积更小
terserOptions:{
compress:{
drop_console:!isDev,
drop_debugger:!isDev
}
},
rollupOptions: {
output: {
manualChunks: {
// 打包优化
core: ['vue', 'vue-router', 'vuex']
},
},
},
},
server:{
open:true, //vite项目启动时自动打开浏览器
hmr:true, //开启热更新
port:8090,
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
//比如图片资源都在src/assets/image目录下,不想在项目中每次都通过require("../assets/image/1.jpg")这样写一长串去引用。
"/images":"src/assets/images/",//这里不能通过path模块解析路径的写法
}
}
}
})