跳至内容

服务器选项

server.host

  • 类型: string | boolean
  • 默认值: 'localhost'

指定服务器应该监听的 IP 地址。将其设置为 0.0.0.0true 以监听所有地址,包括 LAN 和公共地址。

这可以通过 CLI 使用 --host 0.0.0.0--host 设置。

注意

在某些情况下,其他服务器可能会响应而不是 Vite。

第一种情况是使用 localhost 时。默认情况下,v17 版本以下的 Node.js 会重新排序 DNS 解析地址的结果。访问 localhost 时,浏览器会使用 DNS 解析地址,该地址可能与 Vite 监听的地址不同。Vite 会在地址不同时打印解析后的地址。

您可以设置 dns.setDefaultResultOrder('verbatim') 来禁用重新排序行为。然后,Vite 将打印地址为 localhost

js
// 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)。

BROWSERBROWSER_ARGS 也是您可以在 .env 文件中设置的特殊环境变量,以对其进行配置。有关更多详细信息,请参阅 open

示例

js
export default defineConfig({
  server: {
    open: '/docs/index.html',
  },
})

server.proxy

  • 类型: Record<string, string | ProxyOptions>

为开发服务器配置自定义代理规则。期望 { key: options } 对的对象。任何请求路径以该键开头的请求都将被代理到指定的 target。如果键以 ^ 开头,它将被解释为 RegExpconfigure 选项可用于访问代理实例。

请注意,如果您使用非相对 base,则必须在每个键前加上该 base

扩展 http-proxy。其他选项 在此

在某些情况下,您可能还想配置底层的开发服务器(例如,向内部 connect 应用程序添加自定义中间件)。为此,您需要编写自己的 插件 并使用 configureServer 函数。

示例

js
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 是仅在客户端使用的文件,而 ssrFiles 是仅在 SSR 中使用的文件。它们接受相对于 root 的文件路径或 fast-glob 模式数组。

确保只添加常用文件,以免在启动时过载 Vite 开发服务器。

js
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 的 cacheDirbuild.outDir 目录。更新被观察文件时,Vite 将应用 HMR 并仅在需要时更新页面。

如果设置为 null,则不会观察任何文件。server.watcher 将提供一个兼容的事件发射器,但调用 addunwatch 将不会有任何效果。

观察 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 服务器。

js
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

接受一个路径来指定自定义工作区根目录。可以是绝对路径或相对于 项目根目录 的路径。例如

js
export default defineConfig({
  server: {
    fs: {
      // Allow serving files from one level up to the project root
      allow: ['..'],
    },
  },
})

当指定 server.fs.allow 时,将禁用自动工作区根目录检测。为了扩展原始行为,公开了实用程序 searchForWorkspaceRoot

js
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 的来源。

js
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 来禁用此行为,或者,为了完全控制,可以传递一个函数,该函数接受源路径和源映射路径并返回是否忽略源路径。

js
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.sourcemapIgnoreListbuild.rollupOptions.output.sourcemapIgnoreList 需要独立设置。server.sourcemapIgnoreList 是一个服务器端配置,不会从定义的 rollup 选项中获取其默认值。