使用 vite 创建项目完成后会自动生成 一个 vite.config.js 代码如下:
import { defineConfig } from 'vite' | |
import vue from '@vitejs/plugin-vue' | |
export default defineConfig({ | |
plugins: [vue()], | |
}) |
当以命令方式运行 vite 时,vite 会自动解析项目根目录下 vite.config.js 的文件。配置不全时,在开发环境下运行都是正常的,但是打包上线的时候就会出现各种问题。如:
- 假设不配置 base 时,打包之后,访问时出现白屏。
- alias 不配置的时候,每次引入文件需要找根目录,比较麻烦。
以下是 vite.config.js 的更多常用参数配置以及意义:
import { defineConfig } from 'vite' // 帮手函数,这样不用 jsdoc 注解也可以获取类型提示 | |
import vue from '@vitejs/plugin-vue' | |
const { resolve } = require('path') | |
import { viteMockServe } from "vite-plugin-mock" | |
const localEnabled = process.env.USE_MOCK || false; | |
const prodEnabled = process.env.USE_CHUNK_MOCK || false; | |
// https://vitejs.dev/config/ | |
export default () => defineConfig({ | |
plugins: [ // 配置需要使用的插件列表 | |
vue(), | |
viteMockServe({ | |
mockPath: "./src/server/mock", | |
localEnabled: localEnabled, // 开发打包开关 true 时打开 mock false 关闭 mock | |
prodEnabled: prodEnabled, //prodEnabled, // 生产打包开关 | |
// 这样可以控制关闭 mock 的时候不让 mock 打包到最终代码内 | |
injectCode: ` | |
import { setupProdMockServer } from './mockProdServer'; | |
setupProdMockServer(); | |
`, | |
logger: false, // 是否在控制台显示请求日志 | |
supportTs: false // 打开后,可以读取 ts 文件模块 打开后将无法监视 .js 文件 | |
}) | |
], | |
// 强制预构建插件包 | |
optimizeDeps: { | |
// 检测需要预构建的依赖项 | |
entries: [], | |
// 默认情况下,不在 node_modules 中的,链接的包不会预构建 | |
include: ['axios'], | |
exclude: ['your-package-name'] // 排除在优化之外 | |
}, | |
// 静态资源服务的文件夹 | |
publicDir: "public", | |
base: './', | |
// 静态资源处理 | |
assetsInclude: "", | |
// 控制台输出的级别 info 、warn、error、silent | |
logLevel: "info", | |
// 设为 false 可以避免 vite 清屏而错过在终端中打印某些关键信息 | |
clearScreen: true, | |
resolve: { | |
alias: [ // 配置别名 | |
{ find: '@', replacement: resolve(__dirname, 'src') } | |
], | |
// 情景导出 package.json 配置中的 exports 字段 | |
conditions: [], | |
// 导入时想要省略的扩展名列表 | |
// 不建议使用 .vue 影响 IDE 和类型支持 | |
extensions:['.mjs','.js','.ts','.jsx','.tsx','.json'] | |
}, | |
// css | |
css: { | |
// 配置 css modules 的行为 | |
modules: {}, | |
//postCss 配置 | |
postcss: {}, | |
// 指定传递给 css 预处理器的选项 | |
preprocessorOptions:{ | |
scss: { | |
additionalData:`$injectedColor:orange;` | |
} | |
} | |
}, | |
json: { | |
// 是否支持从 .json 文件中进行按名导入 | |
namedExports: true, | |
// 若设置为 true 导入的 json 会被转为 export default JSON.parse ("..") 会比转译成对象字面量性能更好 | |
stringify:false | |
}, | |
// 继承自 esbuild 转换选项,最常见的用例是自定义 JSX | |
esbuild: { | |
jsxFactory: "h", | |
jsxFragment: "Fragment", | |
jsxInject: `import Vue from 'vue'` | |
}, | |
// 本地运行配置,以及反向代理配置 | |
server: { | |
host: "localhost", | |
https: false, // 是否启用 http 2 | |
cors: true, // 为开发服务器配置 CORS , 默认启用并允许任何源 | |
open: true, // 服务启动时自动在浏览器中打开应用 | |
port: "9000", | |
strictPort: false, // 设为 true 时端口被占用则直接退出,不会尝试下一个可用端口 | |
force: true, // 是否强制依赖预构建 | |
hmr: false, // 禁用或配置 HMR 连接 | |
// 传递给 chockidar 的文件系统监视器选项 | |
watch: { | |
ignored: ["!**/node_modules/your-package-name/**"] | |
}, | |
// 反向代理配置 | |
proxy: { | |
'/api': { | |
target: "https://xxxx.com/", | |
changeOrigin: true, | |
rewrite: (path) => path.replace(/^/api/, '') | |
} | |
} | |
}, | |
// 打包配置 | |
build: { | |
// 浏览器兼容性 "esnext"|"modules" | |
target: "modules", | |
// 指定输出路径 | |
outDir: "dist", | |
// 生成静态资源的存放路径 | |
assetsDir: "assets", | |
// 小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求。设置为 0 可以完全禁用此项 | |
assetsInlineLimit: 4096, | |
// 启用 / 禁用 CSS 代码拆分 | |
cssCodeSplit: true, | |
// 构建后是否生成 source map 文件 | |
sourcemap: false, | |
// 自定义底层的 Rollup 打包配置 | |
rollupOptions: {}, | |
// @rollup/plugin-commonjs 插件的选项 | |
commonjsOptions: {}, | |
// 构建的库 | |
lib: {}, | |
// 当设置为 true,构建后将会生成 manifest.json 文件 | |
manifest: false, | |
// 设置为 false 可以禁用最小化混淆, | |
// 或是用来指定使用哪种混淆器 | |
// boolean | 'terser' | 'esbuild' | |
minify: "terser", //terser 构建后文件体积更小 | |
// 传递给 Terser 的更多 minify 选项。 | |
terserOptions: {}, | |
// 设置为 false 来禁用将构建后的文件写入磁盘 | |
write: true, | |
// 默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录。 | |
emptyOutDir: true, | |
// 启用 / 禁用 brotli 压缩大小报告 | |
brotliSize: true, | |
//chunk 大小警告的限制 | |
chunkSizeWarningLimit: 500 | |
}, | |
ssr: { | |
// 列出的是要为 SSR 强制外部化的依赖 | |
external: [], | |
// 列出的是防止被 SSR 外部化依赖项 | |
noExternal: [] | |
} | |
}) |