@astrojs/ vercel
此适配器允许 Astro 将你的hybrid
或 server
渲染站点 部署到Vercel。
如果你使用 Astro 作为 静态
站点生成器,只有当你使用额外的 Vercel 服务时(例如 Vercel 网络分析,Vercel 图像优化),你才需要这个适配器。否则,你不需要适配器来部署你的 静态
站点。
在我们的 Vercel 部署指南 中学习和部署你的 Astro 站点。
为什么选择 Astro Vercel
段落标题 为什么选择 Astro VercelVercel 是一个部署平台,它允许你通过直接连接到 GitHub 仓库来托管你的站点。这个适配器增强了 Astro 的构建过程,为通过 Vercel 进行部署做好了准备。
安装
段落标题 安装Astro 包含了一个 astro add
命令,用于自动设置官方集成。如果你愿意,也可以手动安装集成。
在 Astro 项目中使用以下 asrto add
命令添加 Vercel 适配器,以启用 SSR。这将安装 @astrojs/vercel
并一步到位地对你的 astro.config.mjs
文件进行相应的更改。
手动安装
段落标题 手动安装首先,使用适合你的包管理器,将 @astrojs/vercel
适配器添加到你项目的依赖项中:
然后,将适配器和你想要的按需渲染模式添加到你的 astro.config.*
文件中:
选择目标
段落标题 选择目标你可以部署到不同的目标:
serverless
:在 Node.js 函数内进行服务端渲染。static
:生成一个遵循 Vercel 输出格式、重定向等的静态网站。
你可以通过改变导入来切换目标:
用法
段落标题 用法你可以通过 CLI ( vercel deploy
) 或者通过 Vercel 控制台 连接到你的新仓库进行部署。或者,你可以在本地创建生产版本构建:
配置
段落标题 配置要配置这个适配器,将一个对象传递给 astro.config.mjs
中的 vercel()
函数调用:
webAnalytics
段落标题 webAnalytics类型: VercelWebAnalyticsConfig
适用于: Serverless, Static
@astrojs/vercel@3.8.0
你可以通过设置 webAnalytics: { enabled: true }
来启用 Vercel Web Analytics。这将在所有页面中注入 Vercel 的跟踪脚本。
imagesConfig
段落标题 imagesConfig类型: VercelImageConfig
适用于: Serverless, Static
@astrojs/vercel@3.3.0
Vercel 的图片优化 API 选项。查看 Vercel 的图片优化配置文档以获取支持的参数的完整列表。
domains
和 remotePatterns
属性将自动使用 Astro 对应的 image
设置 来填充。
imageService
段落标题 imageService类型: boolean
适用于: Serverless, Static
@astrojs/vercel@3.3.0
启用后,在生产中会自动配置并使用由 Vercel Image Optimization API 提供支持的图像服务 。在开发中,将使用由 devImageService
指定的图像服务。
devImageService
段落标题 devImageService类型: 'sharp' | 'squoosh' | string
适用于: Serverless, Static
@astrojs/vercel@3.8.0
默认值: sharp
当 imageService 启用时,允许你在开发中配置使用哪个图像服务。如果你无法在开发机器上安装 Sharp 的依赖项,但使用另一个图像服务(如 Squoosh)可以让你在开发环境中预览图像,这可能很有用。但构建不会受其影响,将始终使用 Vercel 的图像优化。
它也可以设置为任意值,以使用自定义图像服务而不是 Astro 的内置图像服务。
isr
段落标题 isr类型: boolean | VercelISRConfig
适用于: Serverless
@astrojs/vercel@7.2.0
默认值: false
允许你的项目作为一个 ISR (增量式静态再生) 功能部署,这个功能以首次请求后预渲染页面相同的方式缓存你按需渲染的页面。
要启用此功能,在你的 astro.config.mjs
中的 Vercel 适配器配置里将 isr
设置为 true:
请注意,ISR 功能请求不包括搜索参数,这与静态模式下的 请求 类似。
ISR 缓存失效
段落标题 ISR 缓存失效默认情况下,ISR 函数会在你的部署期间进行缓存。你可以通过设置过期时间,或者完全排除特定路由不进行缓存,来进一步控制缓存。
基于时间的失效
段落标题 基于时间的失效你可以通过配置秒为单位的 expiration
值来改变缓存路由的时间长度:
从缓存中排除路径
段落标题 从缓存中排除路径要实现 Vercel 的草稿模式或按需增量式静态再生 (ISR),你可以创建一个绕过令牌,并将其连同任何要从缓存中排除的路径一起提供给 isr
配置:
includeFiles
段落标题 includeFiles类型: string[]
适用于: Serverless
使用此属性来强制将文件与你的函数打包在一起。当你发现缺失文件时,这很有帮助。
excludeFiles
段落标题 excludeFiles类型: string[]
适用于: Serverless
使用此属性来从打包过程中排除任何会被包含的文件。
maxDuration
段落标题 maxDuration类型: number
适用于: Serverless
使用这个属性来延长或限制无服务器函数运行的最长持续时间(以秒为单位),直到超时。请参阅 Vercel 文档 获取你的账户计划的默认和最大时限。
函数打包配置
段落标题 函数打包配置Vercel 适配器默认将所有路由组合成一个函数。
你也可以使用 functionPerRoute
选项将构建拆分为每个路由一个函数。这样可以减少每个函数的大小,这意味着你不太可能超过单个函数的大小限制。并且,代码启动更快。
在启用 functionPerRoute
前请查验你的 Vercel 计划是否包含足够数量的函数。例如,Vercel 的免费计划限制每个部署拥有不超过 12 个函数。如果你的 Vercel 计划不足以满足项目中的路由数量,你将在部署过程中收到错误消息。
Vercel Edge 中间件
段落标题 Vercel Edge 中间件你可以使用 Vercel Edge 中间件 在发送响应之前拦截请求并重定向。Vercel 中间件可以用于 Edge、SSR 和静态部署。
你可能不需要安装此软件包来使用中间件。@vercel/edge
仅在使用某些中间件功能(例如地理位置)时需要。更多信息请参阅 Vercel 的中间件文档。
- 在你的项目根目录添加一个
middleware.js
文件:
- 在本地开发时,你可以运行
vercel dev
来运行中间件。在生产中,Vercel 会自动处理这个。
尝试重写? 目前,使用中间件重写请求仅适用于静态文件。
在 Vercel Edge 函数上运行 Astro 中间件
段落标题 在 Vercel Edge 函数上运行 Astro 中间件@astrojs/vercel/serverless
适配器可以根据你代码库中的 Astro 中间件创建一个 边缘函数。当启用 edgeMiddleware
时,边缘函数将为包括静态资源、预渲染页面和按需渲染页面在内的所有请求执行你的中间件代码。
对于按需渲染的页面,context.locals
对象会被 JSON 序列化并通过标头发送给无服务器函数,由该函数执行渲染。作为安全措施,除非请求来自生成的边缘函数,否则无服务器函数将拒绝服务,并返回 403 Forbidden
响应。
这是一个选择性功能。要启用它,请将 edgeMiddleware
设置为 true
:
可选的,你可以在 src文件夹
中创建一个被适配器识别的文件,名为 vercel-edge-middleware.(js|ts)
,以创建 Astro.locals
。
Typings 需要 @vercel/edge
包。
如果你使用 TypeScript,可以将函数类型化如下:
这个函数返回的数据将传递给 Astro 中间件。
函数:
- 必须导出一个 default 函数;
- 必须 return 一个
object
; - 接受一个具有
request
和context
属性的对象; request
的类型为Request
;context
的类型为RequestContext
;
限制和约束
段落标题 限制和约束当你选择此功能时,需要注意一些限制:
- Vercel Edge 中间件将始终是第一个接收
Request
的函数,并且是接收Response
的最后一个函数。这是一种遵循 Vercel 设定的边界的结构性约束。 - 仅使用
request
和context
来生成一个Astro.locals
对象。像重定向等操作应该委托给 Astro 中间件。 Astro.locals
必须是可序列化的。不这样做将导致 运行时错误. 这意味着你 不能 存储复杂类型比如Map
、function
、Set
等
Node.js 版本支持
段落标题 Node.js 版本支持@astrojs/vercel
适配器支持特定的 Node.js 版本,用于在 Vercel 上部署 Astro 项目。要在 Vercel 上查看受支持的 Node.js 版本,请单击项目的设置选项卡,然后向下滚动到 “Node.js版本” 部分。
查看Vercel文档了解更多信息。