- vite.config.js中的基本配置
import { join } from 'path'
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import svgLoader from 'vite-svg-loader';
import { VuetifyResolver } from 'unplugin-vue-components/resolvers';
import Components from 'unplugin-vue-components/vite';
import AutoImport from 'unplugin-auto-import/vite';
import viteCompression from 'vite-plugin-compression'
import { visualizer} from 'rollup-plugin-visualizer'
import {createHtmlPlugin} from 'vite-plugin-html'
import externalGlobals from 'rollup-plugin-external-globals'
export default defineConfig({
plugins: [
vue(),
svgLoader(),
AutoImport({
imports: ['vue'],
}),
visualizer({
open: true
}),
createHtmlPlugin({
minify: true,
inject: {
data: {
vuescript: '<script src="https://cdn.jsdelivr.net/npm/vue@3.3.4/dist/vue.global.min.js"></script>',
elementPlusScript: `
<link href="https://cdn.jsdelivr.net/npm/element-plus@2.2.22/dist/index.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/element-plus@2.2.22/dist/index.full.min.js"></script>`,
cryptoJs: '<script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/index.min.js"></script>'
}
}
}),
Components({
resolvers: [VuetifyResolver()],
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
}),
],
build: {
assetsInlineLimit:4096,
minify: 'terser',
external: ['vue', 'element-plus', 'crypto-js'],
plugins: [
externalGlobals({
vue: 'Vue',
'element-plus': 'ElementPlus',
'crypto-js': 'CryptoJS'
}),
viteCompression({
threshold: 1024000
}),
],
rollupOptions: {
output: {
chunkFileNames: 'static/js/[name]-[hash].js',
entryFileNames: 'static/js/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
manualChunks(id) {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString();
}
}
}
},
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
},
resolve: {
alias: {
'@': join(__dirname, 'src'),
}
},
server: {
host: true,
port: 1798,
proxy: {
'/admin': {
target: 'http://dev.hospital.admin.igandanyiyuan.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/admin/, '')
}
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/style/variables.scss";`
}
}
},
publicDir: '/public'
});
- package.json中的基本配置
{
"name": "demo",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"reset-css": "^5.0.2",
"vue": "^3.3.4",
"vue-router": "^4.2.4"
},
"devDependencies": {
"@types/node": "^20.4.5",
"@vitejs/plugin-vue": "^4.2.3",
"rollup-plugin-external-globals": "^0.8.0",
"rollup-plugin-visualizer": "^5.9.2",
"terser": "^5.19.1",
"unplugin-auto-import": "^0.16.6",
"unplugin-vue-components": "^0.25.1",
"vite": "^4.4.5",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-html": "^3.2.0"
}
}