vite vue3 项目配置记录
基础配置
JavaScript
export default defineConfig({
base:"", // 配置css、js等资源为相对目录
//... 配置卸载这里
define: {},
plugins: []
})
define
- 做一些文本替换的功能,在vue3中常见的是关闭options选项,以便打包之后缩小体积
JavaScript
define: {
__VUE_OPTIONS_API__: false,
__VUE_PROD_DEVTOOLS__: false,
},
plugins
- 配置一些插件,也是vite最核心的部分
1. vue 插件
JavaScript
import vue from '@vitejs/plugin-vue';
//...
plugins: [
vue(),
]
//...
2. vueJsx 插件
JavaScript
import vueJsx from '@vitejs/plugin-vue-jsx';
//...
plugins: [
vueJsx(),
]
//...
3. 自动导入第三方包插件
- 可以自动导入
vue
、antd-design-vue
、element-plus
、自定义组件,等。简化代码、少些代码必备
JavaScript
import AutoImport from "unplugin-auto-import/vite"
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers' // 自动注入 antd-design-vue
// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' 自动注入 ElementPlus
//...
plugins: [
AutoImport({
imports: ["vue"],
dts: "./auto-import.d.ts", // 指定类型位置,不知道则不会生成类型注解
}),
Components({
resolvers: [AntDesignVueResolver()]
}),
]
//...
4. css 注入js代码当中
- 一般在自制一些第三方库的时候用到
JavaScript
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'
//...
plugins: [
cssInjectedByJsPlugin(),
]
//...
5. 生成d.ts文件
- 专为lib模式打造的,生成dts文件神器
JavaScript
import dts from 'vite-plugin-dts'
//...
plugins: [
dts(),
]
//...
6.cdn
这种方式仅支持esm方式,commonjs参考:https://blog.csdn.net/m0_68324632/article/details/126828350
JavaScript
rollupOptions: {
external: [
"vue",
"axios",
"echarts",
],
output: {
paths: {
vue: 'https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.esm-browser.js',
axios: 'https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/esm/axios.js',
echarts: 'https://cdn.bootcdn.net/ajax/libs/echarts/5.4.3/echarts.esm.min.js',
},
}
}
7. 打包分析
JavaScript
import { visualizer } from 'rollup-plugin-visualizer';
plugins: [
visualizer({
emitFile: false,
filename: 'analysis-chart.html', // 分析图生成的文件名
open:true // 如果存在本地服务端口,将在打包后自动展示
}),
]
8.index.html
文件注入变量
ts
import { createHtmlPlugin } from 'vite-plugin-html';
export default ({ mode }: ConfigEnv): UserConfig => {
// 根据当前工作目录中的 `mode` 加载 .env 文件
// 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。
const env = loadEnv(mode, process.cwd(), 'VITE_')
return {
plugins: [
createHtmlPlugin({
inject: {
data: {
...env
},
},
}),
],
}
}
html
<div class="preload__footer">
<div> Copyright <%- VITE_APP_COPYRIGHT %> <%- VITE_APP_COMPANY_NAME %> </div>
<div> 最后更新日期:<%- VITE_APP_SYSTEM_UPDATE_DATE %> 版本:<%- VITE_APP_VERSION %></div>
</div>
打包选项
build: {
lib: { // lib 选项是打包为库的时候才需要,一般项目不需要
entry: pathResolve(`../src/${name}/index`), // 入口路径,nane自定义
name: 'howuse',// 库名称,对应下面的format值
fileName: (format) => `${name}.${format}.js`,
formats: ['es', "cjs"], // 打包输出哪些模块类型格式
},
target: 'modules', // 默认的值,模块方式使用
outDir: 'dist', //指定输出路径
assetsDir: 'static', // 指定生成静态资源的存放路径
rollupOptions: {
external: ["prismjs"] // 排除某些包,不打包在内。可以是正则、回调函数
}
},
css 选项
JavaScript
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true, // 启动才可正确在js当中导入
modifyVars: { // 设置一些全局变量
namespace: "howuse",
defaultZIndex: 1000,
},
}
}
},
服务和反向代理配置
JavaScript
// 本地运行配置,及反向代理配置
server: {
cors: true, // 默认启用并允许任何源
// open: true, // 在服务器启动时自动在浏览器中打开应用程序
proxy: {
'/api': {
target: 'http://192.168.0.2:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}