切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
HTML
正则表达式
Json
包管理工具
vite
CSS
XPath
JavaScript
Jquery
less
ES6
Vue
React
vue 3
Layui
editor.md
sea.js
Zepto.js
mysql.js
mssql.js
NodeJs
Express
前端template
YAML
杂项
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
前端
Vite 配置对象 defineConfig
[TOC] ## defineConfig 函数重构 defineConfig 是一个专门用来为 Vite 配置文件提供类型提示和智能感知的工具函数。在它的类型定义中,一共有 **4 个重载**,分别对应了传递不同类型参数的场景: 1. `defineConfig(config: UserConfig): UserConfig` 2. `defineConfig(config: Promise<UserConfig>): Promise<UserConfig>` 3. `defineConfig(config: (env: ConfigEnv) => UserConfig): UserConfig` 4. `defineConfig(config: (env: ConfigEnv) => Promise<UserConfig>): Promise<UserConfig>` 它们都返回传入的参数本身,本身不进行任何转换,全部作用就是在类型层面为你提供帮助。接下来,我们具体看看每个重载的含义。 ### 1. 直接传递配置对象 ```typescript function defineConfig(config: UserConfig): UserConfig ``` **含义**:这是最简单的用法,直接传递一个配置对象 `UserConfig`。它不进行任何转换,主要作用是提供 TypeScript 的类型提示与检查。 **使用示例**: ```javascript // vite.config.js import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], server: { port: 3000 } }) ``` ### 2. 传递一个返回配置对象的 Promise ```typescript function defineConfig(config: Promise<UserConfig>): Promise<UserConfig> ``` **含义**:如果配置需要从一个异步操作中获取(例如,从远程接口拉取),你可以传递这个异步结果的 `Promise`。`defineConfig` 会识别出这是一个 `Promise` 并返回它,最终会由 Vite 内部等待这个 `Promise` 完成后再使用其内部的对象。 **使用示例**: ```javascript import { defineConfig } from 'vite' // 模拟一个异步获取配置的函数 const fetchConfig = async () => { const response = await fetch('https://api.example.com/vite-config') return response.json() } export default defineConfig(fetchConfig()) ``` ### 3. 传递一个返回配置对象的同步函数 ```typescript function defineConfig(config: (env: ConfigEnv) => UserConfig): UserConfig ``` **含义**:传递一个接收 `ConfigEnv` 参数并**同步**返回配置对象的函数。Vite 会根据当前的运行环境(如开发或构建)动态生成配置。 **`ConfigEnv` 对象包含的参数**: | 参数 | 类型 | 含义 | | :--- | :--- | :--- | | `command` | `build \ serve` | 当前运行的命令。`serve` 代表 `vite` 开发服务器;`build` 代表 `vite build` 构建命令。 | | `mode` | `string` | 当前运行的模式,由 `--mode` 参数指定。 | | `isSsrBuild` | `boolean` | 是否用于服务端渲染(SSR)构建。 | | `isPreview` | `boolean` | 是否用于预览模式。 | **使用示例**: ```javascript import { defineConfig } from 'vite' export default defineConfig(({ command, mode }) => { if (command === 'serve') { return { // 开发模式下的配置 server: { port: 3000 } } } else { return { // 构建模式下的配置 build: { minify: 'esbuild' } } } }) ``` ### 4. 传递一个返回配置对象 Promise 的异步函数 ```typescript function defineConfig(config: (env: ConfigEnv) => Promise<UserConfig>): Promise<UserConfig> ``` **含义**:这是第三种情况的异步版本。配置函数可以是 `async` 的,内部可以包含异步操作,其参数 `ConfigEnv` 与同步版本完全相同。Vite 会等待这个异步函数完成并返回结果。 **使用示例**: ```javascript import { defineConfig } from 'vite' export default defineConfig(async ({ command, mode }) => { // 执行一些异步操作,如动态读取文件 const data = await asyncFunction() return { // 基于异步数据生成配置 define: { __APP_DATA__: data } } }) ``` > Tips: > 此外,如果你正在使用 Vitest 进行单元测试,并且遇到了类型报错,可能需要将 `defineConfig` 从`'vitest/config'` 中导入,以确保 `test` 等 Vitest 专属配置字段的类型能够被正确识别。 ``` import { defineConfig } from 'vitest/config' ``` ## vite 配置对象 defineConfig 属性说明 ### 1. 顶级配置 (Shared Options) | 配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | **`root`** | 指定项目的根目录(`index.html` 所在位置)。默认为执行 `vite` 命令的当前工作目录。 | 否 | | **`base`** | 开发或生产环境服务的公共基础路径。例如,部署在 `https://foo.com/bar/` 时,应设为 `'/bar/'`。 | 否 | | **`publicDir`** | 存放静态资源的目录。此目录下的文件在开发时可直接访问,构建时会被完整复制到 `outDir` 的根目录。设为 `false` 可禁用。 | 否 | | **`cacheDir`** | 存储预构建依赖和其他缓存文件的目录。默认为 `node_modules/.vite`。 | 否 | | **`plugins`** | 存放 Vite 插件的数组。这是扩展 Vite 功能的主要方式。 | 否 | | **`resolve`** | 配置模块解析规则,包括别名 (`alias`)、自动补全的扩展名 (`extensions`) 等。 | 否 | | **`define`** | 定义全局常量替换。在构建时,代码中的这些占位符会被替换为具体的值,常用于区分环境。 | 否 | | **`css`** | 配置 CSS 相关行为,包括 CSS 模块、预处理器和 PostCSS 等。 | 否 | | **`json`** | 配置 JSON 文件的导入行为,如是否支持具名导入 (`namedExports`)。 | 否 | | **`esbuild`** | 直接配置底层使用的 `esbuild`,常用于自定义 JSX 的转换。 | 否 | | **`assetsInclude`** | 指定额外需要视为静态资源处理的文件类型。 | 否 | | **`logLevel`** | 控制控制台输出的日志级别,可选 `'info'`, `'warn'`, `'error'`, `'silent'`。 | 否 | | **`clearScreen`** | 设为 `false` 可避免 Vite 在日志输出时清空终端屏幕。 | 否 | | **`envDir`** | 用于加载 `.env` 文件的目录,默认为 `root` 目录。 | 否 | | **`envPrefix`** | 指定只有以特定前缀开头的环境变量才会被暴露给客户端代码。默认为 `VITE_`。 | 否 | | **`appType`** | 标识应用类型(`'spa'`, `'mpa'`, `'custom'`),影响开发服务器的行为,如 HTML 中间件的处理。 | 否 | | **`server`** | 配置开发服务器,如端口、代理和热更新等。 | 否 | | **`build`** | 配置生产构建的行为,如输出目录、代码压缩和分块策略等。 | 否 | | **`preview`** | 配置预览服务器,用于本地预览生产构建产物。 | 否 | | **`optimizeDeps`** | 配置依赖预构建的行为,用于优化开发环境的加载性能。 | 否 | | **`ssr`** | 配置服务端渲染(SSR)的构建行为。 | 否 | | **`worker`** | 配置 Web Worker 的打包方式。 | 否 | ### 2. 常用子配置详解 为了更好地理解,我将一些常用的子配置进行了详细拆解: #### 2.1. build 构建选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `outDir` | 构建输出目录,默认为 `dist`。 | 否 | | `assetsDir` | 指定静态资源(如 JS、CSS、图片)在输出目录中的存放路径。 | 否 | | `assetsInlineLimit` | 小于此值(单位为字节)的静态资源会被内联为 base64 编码,以避免额外的网络请求。 | 否 | | `sourcemap` | 是否生成 source map 文件,用于调试。 | 否 | | `minify` | 代码压缩方式,可选 `'esbuild'`(更快)或 `'terser'`(更优)。默认为 `'esbuild'`。 | 否 | | `target` | 设置构建产物的浏览器兼容目标,默认为 `'modules'`(支持原生 ES 模块的浏览器)。 | 否 | | `rollupOptions` | 透传给底层打包器 Rollup 的选项,用于自定义更复杂的打包行为,如代码分割入口 (`input`) 等。 | 否 | | `commonjsOptions` | 配置 CommonJS 模块的转换行为。 | 否 | | `lib` | 当打包为库时使用的选项。 | 否 | | `manifest` | 是否生成 manifest.json 文件,用于记录资源映射关系。 | 否 | | `cssCodeSplit` | 是否启用 CSS 代码分割。默认为 `true`。 | 否 | | `cssTarget` | 为 CSS 的转译设置浏览器兼容目标。 | 否 | | `chunkSizeWarningLimit` | 设置单个 chunk 大小的警告阈值(单位为 KB)。 | 否 | | `watch` | 配置构建时的文件监听器选项。 | 否 | #### 2.2. server 开发服务器选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `port` | 指定开发服务器端口。 | 否 | | `host` | 指定服务器监听的 IP 地址,设为 `'0.0.0.0'` 可允许局域网或其他设备访问。 | 否 | | `open` | 服务启动时是否自动在浏览器中打开应用。 | 否 | | `proxy` | 配置代理规则,以解决开发环境下的跨域问题。 | 否 | | `cors` | 配置跨域资源共享 (CORS) 行为,默认为 `true`。 | 否 | | `https` | 是否启用 HTTPS。 | 否 | | `hmr` | 配置热模块替换 (HMR) 的行为。 | 否 | | `watch` | 配置开发服务器下的文件监听器选项。 | 否 | | `strictPort` | 设为 `true` 时,若指定端口被占用则直接退出,而不是尝试下一个可用端口。 | 否 | #### 2.3. resolve 模块解析选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `alias` | 配置路径别名,简化模块导入路径。 | 否 | | `extensions` | 在导入时,自动补全的扩展名列表。 | 否 | | `conditions` | 解决包内部“情景导出”时的额外允许条件。 | 否 | | `dedupe` | 强制 Vite 将列出的依赖解析为同一副本,避免因版本冲突导致的问题。 | 否 | | `preserveSymlinks` | 启用此选项会使 Vite 通过原始文件路径来确定文件身份,而不是跟随符号链接。 | 否 | #### 2.4. css 样式处理选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `modules` | 配置 CSS Modules 的行为,如生成的类名规则。 | 否 | | `preprocessorOptions` | 传递给 CSS 预处理器(如 Sass、Less)的选项。 | 否 | | `postcss` | 内联配置 PostCSS 插件。 | 否 | | `devSourcemap` | 是否在开发环境中生成 CSS 的 source map。 | 否 | | `transformer` | 指定 CSS 处理器,可选 `'postcss'` 或 `'lightningcss'`。 | 否 | #### 2.5. optimizeDeps 依赖优化选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `entries` | 指定依赖扫描的入口文件,覆盖默认扫描行为。 | 否 | | `include` | 强制指定某些依赖进行预构建。 | 否 | | `exclude` | 从依赖预构建中排除某些依赖。 | 否 | | `esbuildOptions` | 传递给 `esbuild` 的选项,用于依赖构建阶段。 | 否 | | `disabled` | 设为 `true` 或 `'dev'` 可禁用依赖优化器。 | 否 | #### 2.6. ssr 服务端渲染选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `target` | 指定 SSR 的构建目标环境,如 `'node'` | 否 | | `noExternal` | 强制将某些依赖打包进 SSR bundle 中,而不是外部化。 | 否 | | `external` | 强制将某些依赖从 SSR bundle 中外部化。 | 否 | | `format` | 指定 SSR bundle 的输出格式。 | 否 | | `optimizeDeps` | 为 SSR 构建配置独立的依赖优化选项。 | 否 | #### 2.7. preview 预览服务器选项 | 子配置项 | 作用说明 | 是否必须 | | :--- | :--- | :--- | | `port` | 指定预览服务器端口。 | 否 | | `host` | 指定预览服务器监听的 IP 地址。 | 否 | | `open` | 是否在预览服务器启动时自动打开浏览器。 | 否 | | `proxy` | 为预览服务器配置代理规则。 | 否 | | `cors` | 为预览服务器配置 CORS 行为,默认为 `true`。 | 否 | | `https` | 是否启用 HTTPS。 | 否 |
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号