使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "将 configOptions 合并到单个 options 对象中;proxy 已包含 in intlayer() 中"v9.0.02026/6/25
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
intlayerProxy
intlayerProxy 是一个 Vite 插件,它为所有环境注册语言路由中间件:开发服务器(dev server)、预览服务器(preview server)和生产环境 SSR(Nitro / TanStack Start)。
自 Intlayer v9 起,intlayerProxy会自动包含在主intlayer()插件中,并通过routing.enableProxy: true默认启用。仅当您需要更底层的控制或在标准intlayer()设置之外使用它时,才需要单独注册它。
用法
作为 intlayer() 的一部分(推荐,v9+)
将 proxy 选项传递给主插件,而不是单独注册 intlayerProxy:
复制代码到剪贴板
// vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({ plugins: [ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api"), }, }), ],});独立使用(需要时)
复制代码到剪贴板
// vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({ plugins: [intlayer()],});选项
复制代码到剪贴板
import type { IntlayerProxyPluginOptions } from "vite-intlayer";所有选项都是可选的,并作为单个对象传递:
在弹窗中打开表格以清晰地查看所有数据
| 选项 | 类型 | 描述 |
|---|---|---|
ignore | (req: IncomingMessage) => boolean | 排除语言路由请求的断言函数。返回 true 以跳过请求(例如 API 路由、健康检查)。 |
configOptions | GetConfigurationOptions | 转发给 getConfiguration() 的 Intlayer 配置覆盖项。当您需要代理读取特定的配置文件或覆盖值时使用。 |
示例
复制代码到剪贴板
intlayerProxy({ ignore: (req) => req.url?.startsWith("/api"), configOptions: { configFile: "./config/intlayer.config.ts" },});createIntlayerProxyHandler
createIntlayerProxyHandler 创建一个独立于框架的 Node.js (req, res, next) 中间件,其中包含所有语言路由逻辑。它适用于 Vite 插件 API 不可用的环境(例如普通的 Node.js 服务器或自定义 Nitro 模块)。
复制代码到剪贴板
import { createIntlayerProxyHandler } from "vite-intlayer";const handler = createIntlayerProxyHandler({ ignore: (req) => req.url?.startsWith("/api"), configOptions: { configFile: "./config/intlayer.config.ts" },});// Express / Connectapp.use(handler);生产环境 SSR(通过 h3 的 TanStack Start / Nitro)
复制代码到剪贴板
// server/middleware/intlayerProxy.tsimport { fromNodeMiddleware } from "h3";import { createIntlayerProxyHandler } from "vite-intlayer";export default fromNodeMiddleware( createIntlayerProxyHandler({ ignore: (req) => req.url?.startsWith("/api"), }));路由行为
该中间件映射了 next-intlayer 中间件的路由逻辑,并支持所有 Intlayer 路由模式。
路由模式
在弹窗中打开表格以清晰地查看所有数据
| 模式 | URL 在浏览器中可见 | 行为 |
|---|---|---|
prefix | /zh/about | 默认。URL 中的语言前缀。默认语言会重定向到无前缀 URL,除非启用了 prefix-all。 |
prefix-all | /en/about, /zh/about | 所有语言 — 包括默认语言 — 始终带有前缀。 |
no-prefix | /about | URL 中没有语言。语言仅存储在 cookie 中;URL 重写发生在内部。 |
search-params | /about?locale=zh | 语言作为查询参数传递。在缺失或过期时重定向以添加/更新 locale 参数。 |
检测优先级
- URL 路径前缀(例如
/zh/about→zh)。 - Cookie / localStorage 值(
intlayer-locale)。 Accept-Language请求头。- 配置中的
defaultLocale。
自动绕过
中间件始终直接传递这些请求,而不进行语言处理:
- 匹配
ignore断言的请求。 /node_modules/**/@**– Vite 内部(@vite/,@fs/,@id/等)。/_**– 服务器内部(__vite_ping,__manifest等)。- 路径以文件扩展名结尾的请求(静态资源)。如果静态资源路径上存在语言前缀(例如
/zh/logo.png),则会将其剥离,以便可以正确提供文件。
域名路由
当在您的 Intlayer 配置中配置了 routing.domains 时,中间件处理跨域语言路由:
- 当
domains.zh = "intlayer.zh"时,在intlayer.org上对/zh/about的请求被重定向到https://intlayer.zh/about。 - 对
intlayer.zh/about的请求在内部重写为/zh/about,以便填充[locale]路由参数。
重定向死循环保护
中间件在 2 秒滑动窗口内跟踪每个 originalUrl → newUrl 对的重定向计数。该窗口内超过 10 次重定向将返回具有描述性错误的 500 响应,而不是无限循环。
Nitro / 生产环境 SSR(自动注入,v9+)
当 intlayerProxy 用作 Vite 插件时,它携带一个 .nitro 属性。nitro/vite 构建插件读取此属性并将其推入 nitroConfig.modules 中,因此 intlayerNitroHandler 会自动注册为 Nitro 服务器中间件 — 生产环境 SSR 不需要手动配置。
Nitro 处理器使用 h3 v2 的 Web Fetch API 事件模型(而不是 fromNodeMiddleware),因此它与所有 Nitro 预设兼容:Node, Bun, Deno, edge 运行时。
弃用的别名
在弹窗中打开表格以清晰地查看所有数据
| 弃用的导出 | 替代品 |
|---|---|
intlayerMiddleware | intlayerProxy |
intLayerMiddlewarePlugin | intlayerProxy |