阿卡不拉阿卡不拉
Vue3
阿卡的博客
Vue3
阿卡的博客
  • Vue3

    • 快速入门

      • 搭建工程 👌
      • 模板语法
      • 响应式基础
      • 响应式常用 API
      • 计算属性
      • 类与样式绑定
      • 条件和列表渲染
      • 事件处理
      • 表单处理
      • 生命周期
      • 侦听器
      • 组件介绍
      • Props
      • 自定义事件
      • 组件v-model
      • 插槽
      • 前端路由介绍
      • KeepAlive内置组件
      • 状态管理库
      • 组件库介绍
    • 深入本质

      • 虚拟DOM本质
      • 模板的本质
      • 组件树和虚拟DOM树
      • 数据拦截的本质
      • 响应式数据的本质
      • 响应式的本质
      • 响应式和组件渲染
      • 实现响应式系统 1
      • 实现响应式系统 2
      • 图解EFFECT
      • 实现响应式系统 3
      • 手写computed
      • 手写watch
      • 指令的本质
      • 插槽的本质
      • v-model的本质
      • setup 语法标签
      • 组件生命周期
      • keepalive 生命周期
      • keepalive的本质
      • key的本质
    • 细节补充

      • 【Vue】属性透传
      • 【Vue】依赖注入
      • 【Vue】组合式函数 👌
      • 【Vue】自定义指令
      • 【Vue】插件
      • 【Vue】Transition
      • 【Vue】TransitionGroup
      • 【Vue】Teleport
      • 【Vue】异步组件
      • 【Vue】Suspense
      • 【Router】路由模式
      • 【Router】路由零碎知识
      • 【Router】路由匹配语法
      • 【Router】路由组件传参
      • 【Router】内置组件和函数
      • 【Router】导航守卫
      • 【Router】过渡特效
      • 【Router】滚动行为
      • 【Router】动态路由
      • 【State】通信方式总结
      • 【State】Pinia 自定义插件
      • 【场景】封装树形组件
      • 【场景】自定义 ref 实现防抖
      • 【场景】懒加载
      • 【场景】虚拟列表
      • 【场景】虚拟列表优化
      • 【第三方库】VueUse
      • 【第三方库】vuedragable
      • 【第三方库】vue-drag-resize
      • 【第三方库】vue-chartjs
      • 【第三方库】vuelidate
      • 【第三方库】vue3-lazyload
      • 【场景】Websocket 聊天室
      • 【Vite】✨ 认识 Vite👌
      • 【Vite】配置文件 👌
      • 【Vite】✨ 依赖预构建 👌
      • 【Vite】构建生产版本 👌
      • 【Vite】环境变量与模式
      • 【Vite】CLI
      • 【Vite】Vite 插件
  • 笔面试

    • HTML

      • HTML 面试题汇总
      • 文档声明
      • 语义化
      • W3C 标准组织
      • SEO
      • iframe
      • 微格式
      • 替换元素
      • 页面可见性
    • CSS

      • CSS 面试题汇总
      • CSS 单位总结
      • 居中方式总结
      • 隐藏元素方式总结
      • 浮动
      • 定位总结
      • BFC
      • CSS 属性计算过程
      • CSS 层叠继承规则总结
      • @import 指令
      • CSS3 calc 函数
      • CSS3 媒体查询
      • 过渡和动画事件
      • 渐进增强和优雅降级
      • CSS3 变形
      • 渐进式渲染
      • CSS 渲染性能优化
      • 层叠上下文
      • CSS3 遮罩
    • JavaScript

      • JavaScript 面试题汇总
      • ✨ let、var、const 的区别
      • JS中的数据类型
      • 包装类型
      • 数据类型的转换
      • 运算符
      • ✨ 原型链
      • ✨ this 指向
      • ✨ 垃圾回收与内存泄漏
      • ✨ 执行栈和执行上下文
      • ✨ 作用域和作用域链
      • ✨ 闭包
      • DOM 事件的注册和移除
      • DOM 事件的传播机制
      • 阻止事件默认行为
      • 递归
      • ✨ 属性描述符
      • class 和构造函数区别
      • 浮点数精度问题
      • 严格模式
      • ✨ 函数防抖和节流
      • ✨ WeakSet 和 WeakMap
      • ✨ 深浅拷贝
      • 函数柯里化
      • Node 事件循环
      • 尺寸和位置
    • 浏览器

      • 浏览器面试题汇总
      • ✨ 浏览器的渲染流程
      • ✨ 资源提示关键词
      • 浏览器的组成部分
      • IndexedDB
      • ✨ File API
      • ✨ 浏览器缓存
      • ✨ 浏览器跨标签页通信
      • Web Worker
    • 网络

      • 网络面试题汇总
      • 五层网络模型 👌
      • 常见请求方法 👌
      • ✨cookie👌
      • 面试题
      • 加密
      • ✨JWT👌
      • ✨ 同源策略及跨域问题 👌
      • 文件上传
      • ✨ 输入 url 地址之后
      • 文件下载
      • ✨ session
      • ✨ TCP
      • ✨ CSRF 攻击
      • ✨XSS 攻击 👌
      • ✨ 网络性能优化
      • 断点续传
      • 域名和 DNS
      • SSL、TLS、HTTPS 的关系
      • ✨ HTTP 各版本差异 👌
      • HTTP 缓存协议
      • ✨ WebSocket
    • 工程化

      • CMJ 和 ESM
      • npx
      • ESLint
    • Vue2

      • Vue 面试题汇总相关
      • 组件通信方式总结
      • 虚拟 DOM
      • v-model
      • 数据响应式原理
      • diff
      • 生命周期详解
      • computed
      • 过滤器
      • 作用域插槽
      • 过度和动画
      • 优化
      • keep-alive
      • 长列表优化
      • 其他 API
      • 模式和环境变量
      • 更多配置
      • 更多命令
      • 嵌套路由
      • 路由切换动画
    • Vue3

      • ✨ Vue3 整体变化 👌
      • ✨ Vue3 响应式变化 👌
      • ✨ nextTick 实现原理 👌
      • 两道代码题 👌
      • Vue 运行机制
      • 渲染器核心功能
      • 事件绑定与更新

【Vite】配置文件 👌

在 Vite 中,配置文件项目根目录下的 vite.config.js 文件,最基本的格式为:

export default {
    // 配置选项
};

如果你的 Vite 配置文件不在项目根目录下,你也可以通过 –config 来进行指定:

vite --config my-config.js

Vite 提供了一个工具函数 defineConfig,通过它可以方便的获取类型提示,这对于使用 TS 编写配置尤其有用。

所以一般 Vite 配置文件的基本格式为:

export default defineConfig({
    // 配置选项
});

在 Vite 中,配置大致分为这么几类:

  1. 普通配置:设置项目的基本选项,别名、根目录、插件…
  2. 开发服务器配置:开发服务器的功能,开发服务器的端口、代理、CORS…
  3. 构建配置:构建生产版本时候的配置,输出目录、压缩、CSS 代码拆分…(TODO:链接文章)
  4. 预览配置:配置预览服务器的行为,端口、主机名…
  5. 依赖优化配置:针对依赖预构建做一些,比如可以新增包或者排除包
  6. SSR 配置:服务器端渲染相关配置
  7. Worker 配置:Web Worker 相关配置

这章主要介绍普通配置和开发服务器配置的常用选项。

普通配置

1. root

  • 类型:string
  • 默认值:process.cwd( ) ,默认就是项目根目录
  • 描述:index.html 所在位置,可以是绝对路径,也可以是相对于当前工作目录的路径。

例如:

my-project/
├── public/
│   └── index.html
├── src/
│   ├── main.js
│   └── App.vue
└── vite.config.js

这个时候就可以使用 root 来进行配置:

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
    root: "public", // 将项目根目录设置为 'public' 文件夹
});

2. define

  • 类型:Record<string, any>
  • 描述:定义全局常量替换。在开发过程中,这些条目将被定义为全局变量,被定义为全局变量后,意味着不需要通过 import 来导入,直接使用;在构建过程中会被静态替换。
    export default defineConfig({
        define: {
            __APP_VERSION__: JSON.stringify("v1.0.0"),
            __API_URL__: "window.__backend_api_url",
        },
    });
    

注意:Vite 使用 esbuild 的 define 进行替换,因此值表达式必须是包含 JSON 可序列化的值(null、boolean、number、string、array、object)的字符串或单个标识符。对于非字符串值,Vite 会自动将其转换为 JSON 字符串。

JSON 可序列化指一个数据结构(如对象、数组等)能够被安全地转换为 JSON 格式字符串,且转换后的字符串可通过 JSON.parse() 完整还原为原始数据

3. resolve

resolve 对应的值是一个对象,对象里面对应了好几项配置。

3.1 alias

用于配置路径别名,这样可以简化模块路径引用。

// vite.config.js
import { defineConfig } from "vite";
import path from "path";

export default defineConfig({
    resolve: {
        alias: {
            // 将 '@' 指向 'src' 目录
            "@": path.resolve(__dirname, "src"),
            // 将 '@components' 指向 'src/components' 目录
            "@components": path.resolve(__dirname, "src/components"),
            // 将 '@utils' 指向 'src/utils' 目录
            "@utils": path.resolve(__dirname, "src/utils"),
        },
    },
});

之后在代码中就可以通过别名来指定目录:

// src/main.js
import { createApp } from "vue";
import App from "./App.vue";
import HelloWorld from "@components/HelloWorld.vue"; // 使用 '@components' alias
import { helperFunction } from "@utils/helpers"; // 使用 '@utils' alias

createApp(App).mount("#app");

3.2 extensions

在导入时省略文件扩展名时,尝试的文件扩展名列表。

注意,不推荐对自定义导入类型(如 .vue)省略扩展名,因为这可能会干扰 IDE 和类型支持。

默认值为 ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']

可以自定义扩展名的顺序,比如优先匹配 ts 类型:

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
    resolve: {
        extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], // 自定义扩展名顺序
    },
});

4. CSS

CSS 配置项对应的值同样是一个对象,一个基本的格式如下:

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
    css: {
        // 其他配置项
    },
});

4.1 postcss

该配置项用于配置 PostCSS 的行为,可以是内联的 PostCSS 配置,也可以是自定义目录。

内联 PostCSS 配置:

// vite.config.js
import { defineConfig } from "vite";
import autoprefixer from "autoprefixer";
import cssnano from "cssnano";

export default defineConfig({
    css: {
        postcss: {
            // 在这里配置 postcss 相关内容,例如用哪个插件....
            plugins: [autoprefixer(), cssnano()],
        },
    },
});

自定义目录:

my-project/
├── config/
│   └── postcss.config.js
├── src/
│   └── main.js
└── vite.config.js

这个时候直接指定 postcss 的目录就可以了:

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
    css: {
        postcss: "config", // 指定自定义目录
    },
});

4.2 preprocessorOptions

该配置项用于为 CSS 预处理器指定配置,文件扩展名用于作为键来设置选项。每个预处理器支持的选项可以在它们各自的文档中找到:

CSS 预处理器是一种扩展 CSS 功能的工具,它允许开发者使用类编程语言的特性(变量、嵌套、函数等)编写样式代码,最终编译成标准的 CSS 文件。其核心目标是解决原生 CSS 在大型项目中难以维护的问题。

  • Sass/Scss 支持的配置选项
  • Less 支持的配置选项
  • styl/stylus - 目前仅支持 define,可以作为对象传递。
export default defineConfig({
    css: {
        // 配置 css 预处理器(一般情况下一个项目只用一个预处理器,这里只是演示)
        preprocessorOptions: {
            less: {
                math: "parens-division",
            },
            styl: {
                // 目前仅支持 define
                define: {
                    $specialColor: new stylus.nodes.RGBA(51, 197, 255, 1),
                },
            },
        },
    },
});
4.2.1 preprocessorOptions[extension].additionalData

当你想要为 CSS 预处理器(如 SCSS、SASS、Less 等)添加全局样式、变量、或混合器时,该选项非常有用。

import { defineConfig } from "vite";

export default defineConfig({
    css: {
        preprocessorOptions: {
            scss: {
                // 这里添加了一些全局变量,之后在任何的 Scss 文件中都可以使用这些全局变量
                additionalData: `$injectedColor: orange; $defaultMargin: 10px;`,
            },
        },
    },
});
import { defineConfig } from "vite";

export default defineConfig({
    css: {
        preprocessorOptions: {
            scss: {
                // 相当于给所有的 Scss 文件的头部都添加了这个引用,自动导入 mixins.scss 混合器文件
                additionalData: `@import "@/styles/mixins.scss";`,
            },
        },
    },
});

4.2.2 preprocessorMaxWorkers

如果启用了这个选项,那么 CSS 预处理器会尽可能在 worker 线程中运行。可以设置 number 值,也可以设置布尔值,例如设置成 true 的话表示 CPU 数量减 1.

4.3 devSourcemap

如果设置为 true,Vite 会生成 source map,并在浏览器中显示原始代码。

export default defineConfig({
    css: {
        // 开启 source maps
        devSourcemap: true,
    },
});

4.4 transformer

指定 CSS 处理的引擎,可以设置的值就两个,‘postcss’ 或者 ‘lightningcss’

lightingcss 就是 postcss 的 rust 版本。

服务器配置

服务器配置是指开发服务器,对应的配置项是 server

一个基本的格式如下:

export default defineConfig({
    server: {
        // 众多配置项
    },
});

下面是一些常见的配置项:

1. host

指定服务器应该监听哪个 IP 地址,默认是 localhost.

类型: string | boolean

默认: ‘localhost’

思考 🤔 正常情况下就是 localhost 就好了呀,什么情况下还存在要修改 host 的情况呢?

答案:除了 localhost 以外,我们经常还需要设置为 0.0.0.0 或者 true,表示监听所有的网络接口请求。有些时候需要多设备来测试应用。

2. port

监听的端口号,默认是 5173.

3. strictPort

如果设置为 true,Vite 将严格使用指定的端口。如果端口被占用,服务器启动将失败。

4. proxy

这个配置项非常常用,用于配置代理服务器。

export default defineConfig({
    server: {
        proxy: {
            "/foo": "http://localhost:4567", // 将 '/foo' 前缀的请求代理到 'http://localhost:4567'
        },
    },
});

对应的值也可以是对象的形式,对象形式能够包含更多的配置选项:

export default defineConfig({
    server: {
        proxy: {
            "/api": {
                target: "http://jsonplaceholder.typicode.com",
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/api/, ""), // 重写路径,将 '/api' 前缀去掉
            },
        },
    },
});

5. open

启动开发服务器时是否自动在浏览器中打开应用,默认值是 false.

6. https

是否启用 HTTPS。如果是一个对象,可以指定 SSL 证书和私钥的路径。

export default defineConfig({
    server: {
        https: {
            key: fs.readFileSync("/path/to/server.key"),
            cert: fs.readFileSync("/path/to/server.crt"),
        },
    },
});

7. watch

自定义文件监视器的选项。这对于开发过程中的**热模块替换(HMR)**非常关键。背后其实使用的是 chokidar(一个 Node.js 的文件系统监听库)它提供了多种可配置的监听选项。

import { defineConfig } from "vite";

export default defineConfig({
    server: {
        watch: {
            // 任何位于 ignored-directory 目录下的文件
            // 或者任何目录下面的 some-specific-file.txt 文件
            // 内容发生更改都不会触发 HMR
            ignored: ["**/ignored-directory/**", "**/some-specific-file.txt"],
        },
    },
});

watch 还支持更加细粒度的控制:

import { defineConfig } from "vite";

export default defineConfig({
    server: {
        watch: {
            ignored: "**/temp/**", // 忽略 temp 目录
            persistent: true, // 持续监听变化
            usePolling: true, // 使用轮询
            interval: 100, // 轮询间隔 100 毫秒
            binaryInterval: 300, // 对于二进制文件的轮询间隔
        },
    },
});

如果想要关闭文件监听,直接设置为 null 即可:

import { defineConfig } from "vite";

export default defineConfig({
    server: {
        watch: null,
    },
});

这里介绍的都是一些比较常用的配置项。至于其他的配置项,后面用到哪项再来具体介绍。

最近更新:: 2025/7/16 06:11
Contributors: AK
Prev
【Vite】✨ 认识 Vite👌
Next
【Vite】✨ 依赖预构建 👌