服务器选项
server.host
- 类型:
string | boolean
- 默认值:
'localhost'
指定服务器应该监听的 IP 地址。将其设置为 0.0.0.0
或 true
以监听所有地址,包括 LAN 和公共地址。
这可以通过 CLI 使用 --host 0.0.0.0
或 --host
设置。
注意
在某些情况下,其他服务器可能会响应而不是 Vite。
第一种情况是使用 localhost
时。默认情况下,v17 版本以下的 Node.js 会重新排序 DNS 解析地址的结果。访问 localhost
时,浏览器会使用 DNS 解析地址,该地址可能与 Vite 监听的地址不同。Vite 会在地址不同时打印解析后的地址。
您可以设置 dns.setDefaultResultOrder('verbatim')
来禁用重新排序行为。然后,Vite 将打印地址为 localhost
。
// vite.config.js
import { defineConfig } from 'vite'
import dns from 'node:dns'
dns.setDefaultResultOrder('verbatim')
export default defineConfig({
// omit
})
第二种情况是使用通配符主机(例如 0.0.0.0
)时。这是因为监听非通配符主机的服务器优先于监听通配符主机的服务器。
从您的 LAN 上的 WSL2 访问服务器
在 WSL2 上运行 Vite 时,仅设置 host: true
无法从您的 LAN 访问服务器。有关更多详细信息,请参阅 WSL 文档。
server.port
- 类型:
number
- 默认值:
5173
指定服务器端口。请注意,如果端口已被使用,Vite 将自动尝试下一个可用端口,因此这可能不是服务器最终监听的实际端口。
server.strictPort
- 类型:
boolean
设置为 true
以在端口已被使用时退出,而不是自动尝试下一个可用端口。
server.https
- 类型:
https.ServerOptions
启用 TLS + HTTP/2。请注意,当 server.proxy
选项 也被使用时,这将降级为仅 TLS。
该值也可以是传递给 https.createServer()
的 选项对象。
需要有效的证书。对于基本设置,您可以将 @vitejs/plugin-basic-ssl 添加到项目插件中,它将自动创建和缓存自签名证书。但我们建议您创建自己的证书。
server.open
- 类型:
boolean | string
在服务器启动时自动在浏览器中打开应用程序。当该值为字符串时,它将用作 URL 的路径名。如果您想在您喜欢的特定浏览器中打开服务器,您可以设置 env process.env.BROWSER
(例如 firefox
)。您还可以设置 process.env.BROWSER_ARGS
以传递其他参数(例如 --incognito
)。
BROWSER
和 BROWSER_ARGS
也是您可以在 .env
文件中设置的特殊环境变量,以对其进行配置。有关更多详细信息,请参阅 open
包。
示例
export default defineConfig({
server: {
open: '/docs/index.html',
},
})
server.proxy
- 类型:
Record<string, string | ProxyOptions>
为开发服务器配置自定义代理规则。期望 { key: options }
对的对象。任何请求路径以该键开头的请求都将被代理到指定的 target。如果键以 ^
开头,它将被解释为 RegExp
。configure
选项可用于访问代理实例。
请注意,如果您使用非相对 base
,则必须在每个键前加上该 base
。
扩展 http-proxy
。其他选项 在此。
在某些情况下,您可能还想配置底层的开发服务器(例如,向内部 connect 应用程序添加自定义中间件)。为此,您需要编写自己的 插件 并使用 configureServer 函数。
示例
export default defineConfig({
server: {
proxy: {
// string shorthand: http://localhost:5173/foo -> http://localhost:4567/foo
'/foo': 'http://localhost:4567',
// with options: http://localhost:5173/api/bar-> http://jsonplaceholder.typicode.com/bar
'/api': {
target: 'http://jsonplaceholder.typicode.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
// with RegEx: http://localhost:5173/fallback/ -> http://jsonplaceholder.typicode.com/
'^/fallback/.*': {
target: 'http://jsonplaceholder.typicode.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/fallback/, ''),
},
// Using the proxy instance
'/api': {
target: 'http://jsonplaceholder.typicode.com',
changeOrigin: true,
configure: (proxy, options) => {
// proxy will be an instance of 'http-proxy'
},
},
// Proxying websockets or socket.io: ws://localhost:5173/socket.io -> ws://localhost:5174/socket.io
'/socket.io': {
target: 'ws://localhost:5174',
ws: true,
},
},
},
})
server.cors
- 类型:
boolean | CorsOptions
为开发服务器配置 CORS。默认情况下启用此功能,并允许任何来源。传递一个 选项对象 以微调行为,或传递 false
以禁用。
server.headers
- 类型:
OutgoingHttpHeaders
指定服务器响应头。
server.hmr
- 类型:
boolean | { protocol?: string, host?: string, port?: number, path?: string, timeout?: number, overlay?: boolean, clientPort?: number, server?: Server }
禁用或配置 HMR 连接(在 HMR websocket 必须使用与 http 服务器不同的地址的情况下)。
将 server.hmr.overlay
设置为 false
以禁用服务器错误覆盖层。
protocol
设置用于 HMR 连接的 WebSocket 协议:ws
(WebSocket)或 wss
(WebSocket 安全)。
clientPort
是一个高级选项,它仅在客户端覆盖端口,允许您在与客户端代码查找的端口不同的端口上提供 websocket。
当 server.hmr.server
被定义时,Vite 将通过提供的服务器处理 HMR 连接请求。如果不是在中间件模式下,Vite 将尝试通过现有服务器处理 HMR 连接请求。当使用自签名证书或您希望通过单个端口在网络上公开 Vite 时,这可能会有所帮助。
查看 vite-setup-catalogue
以获取一些示例。
注意
使用默认配置,位于 Vite 前面的反向代理预计支持代理 WebSocket。如果 Vite HMR 客户端无法连接 WebSocket,客户端将回退到直接连接到 Vite HMR 服务器,绕过反向代理
Direct websocket connection fallback. Check out https://vite.vuejs.ac.cn/config/server-options.html#server-hmr to remove the previous connection error.
当回退发生时,在浏览器中出现的错误可以忽略。为了通过直接绕过反向代理来避免错误,您可以:
- 配置反向代理以也代理 WebSocket
- 设置
server.strictPort = true
并将server.hmr.clientPort
设置为与server.port
相同的值 - 将
server.hmr.port
设置为与server.port
不同的值
server.warmup
- 类型:
{ clientFiles?: string[], ssrFiles?: string[] }
- 相关: 预热常用文件
预热文件以提前转换和缓存结果。这可以改善服务器启动期间的初始页面加载,并防止转换瀑布。
clientFiles
是仅在客户端使用的文件,而 ssrFiles
是仅在 SSR 中使用的文件。它们接受相对于 root
的文件路径或 fast-glob
模式数组。
确保只添加常用文件,以免在启动时过载 Vite 开发服务器。
export default defineConfig({
server: {
warmup: {
clientFiles: ['./src/components/*.vue', './src/utils/big-utils.js'],
ssrFiles: ['./src/server/modules/*.js'],
},
},
})
server.watch
- 类型:
object | null
传递给 chokidar 的文件系统观察器选项。
Vite 服务器观察器默认情况下会观察 root
并跳过 .git/
、node_modules/
以及 Vite 的 cacheDir
和 build.outDir
目录。更新被观察文件时,Vite 将应用 HMR 并仅在需要时更新页面。
如果设置为 null
,则不会观察任何文件。server.watcher
将提供一个兼容的事件发射器,但调用 add
或 unwatch
将不会有任何效果。
观察 node_modules
中的文件
目前无法观察 node_modules
中的文件和包。有关进一步的进展和解决方法,您可以关注 问题 #8619。
在 Windows Subsystem for Linux (WSL) 2 上使用 Vite
在 WSL2 上运行 Vite 时,当文件由 Windows 应用程序(非 WSL2 进程)编辑时,文件系统观察不起作用。这是由于 WSL2 的限制。这也适用于在使用 WSL2 后端的 Docker 上运行。
要解决此问题,您可以:
- 推荐:使用 WSL2 应用程序编辑您的文件。
- 还建议将项目文件夹移到 Windows 文件系统之外。从 WSL2 访问 Windows 文件系统速度很慢。消除这种开销将提高性能。
- 设置
{ usePolling: true }
。
server.middlewareMode
- 类型:
boolean
- 默认值:
false
以中间件模式创建 Vite 服务器。
相关: appType,SSR - 设置开发服务器
示例
import express from 'express'
import { createServer as createViteServer } from 'vite'
async function createServer() {
const app = express()
// Create Vite server in middleware mode
const vite = await createViteServer({
server: { middlewareMode: true },
appType: 'custom', // don't include Vite's default HTML handling middlewares
})
// Use vite's connect instance as middleware
app.use(vite.middlewares)
app.use('*', async (req, res) => {
// Since `appType` is `'custom'`, should serve response here.
// Note: if `appType` is `'spa'` or `'mpa'`, Vite includes middlewares to handle
// HTML requests and 404s so user middlewares should be added
// before Vite's middlewares to take effect instead
})
}
createServer()
server.fs.strict
- 类型:
boolean
- 默认值:
true
(从 Vite 2.7 开始默认启用)
限制在工作区根目录之外提供文件。
server.fs.allow
- 类型:
string[]
限制可以通过 /@fs/
提供的文件。当 server.fs.strict
设置为 true
时,访问不在此目录列表中且未从允许的文件导入的文件将导致 403 错误。
可以提供目录和文件。
Vite 将搜索潜在工作区的根目录并将其用作默认值。有效的工作区满足以下条件,否则将回退到 项目根目录。
- 在
package.json
中包含workspaces
字段 - 包含以下文件之一
lerna.json
pnpm-workspace.yaml
接受一个路径来指定自定义工作区根目录。可以是绝对路径或相对于 项目根目录 的路径。例如
export default defineConfig({
server: {
fs: {
// Allow serving files from one level up to the project root
allow: ['..'],
},
},
})
当指定 server.fs.allow
时,将禁用自动工作区根目录检测。为了扩展原始行为,公开了实用程序 searchForWorkspaceRoot
import { defineConfig, searchForWorkspaceRoot } from 'vite'
export default defineConfig({
server: {
fs: {
allow: [
// search up for workspace root
searchForWorkspaceRoot(process.cwd()),
// your custom rules
'/path/to/custom/allow_directory',
'/path/to/custom/allow_file.demo',
],
},
},
})
server.fs.deny
- 类型:
string[]
- 默认值:
['.env', '.env.*', '*.{crt,pem}']
用于阻止敏感文件被 Vite 开发服务器提供的黑名单。这将比 server.fs.allow
具有更高的优先级。支持 picomatch 模式。
server.origin
- 类型:
string
定义开发过程中生成的资产 URL 的来源。
export default defineConfig({
server: {
origin: 'http://127.0.0.1:8080',
},
})
server.sourcemapIgnoreList
- 类型:
false | (sourcePath: string, sourcemapPath: string) => boolean
- 默认值:
(sourcePath) => sourcePath.includes('node_modules')
是否忽略服务器源映射中的源文件,用于填充 x_google_ignoreList
源映射扩展。
server.sourcemapIgnoreList
等同于 build.rollupOptions.output.sourcemapIgnoreList
用于开发服务器。这两个配置选项之间的区别在于,rollup 函数使用 sourcePath
的相对路径调用,而 server.sourcemapIgnoreList
使用绝对路径调用。在开发过程中,大多数模块在同一个文件夹中具有映射和源代码,因此 sourcePath
的相对路径是文件名本身。在这些情况下,绝对路径使其方便使用。
默认情况下,它会排除所有包含 node_modules
的路径。您可以传递 false
来禁用此行为,或者,为了完全控制,可以传递一个函数,该函数接受源路径和源映射路径并返回是否忽略源路径。
export default defineConfig({
server: {
// This is the default value, and will add all files with node_modules
// in their paths to the ignore list.
sourcemapIgnoreList(sourcePath, sourcemapPath) {
return sourcePath.includes('node_modules')
},
},
})
注意
server.sourcemapIgnoreList
和 build.rollupOptions.output.sourcemapIgnoreList
需要独立设置。server.sourcemapIgnoreList
是一个服务器端配置,不会从定义的 rollup 选项中获取其默认值。