- 起步
- 核心概念
- 教程
- 基础内容
- 内置功能
- 集成
- 操作指南
- 使用指南
- 配置
- 参考
- 社区资源
- 其他
- 为文档做出贡献
- 手动安装 Astro
- 升级到 Astro v4
- 升级到 Astro v3
- 升级到 Astro v2
- Legacy v0.x Upgrade Guide
- 从 Create React App(CRA)迁移
- 关于本教程
- 第一单元:前期准备
- 准备开发环境
- 创建你的第一个 Astro 项目
- 你的第一行 Astro 代码
- 创建在线代码仓库
- 将你的网站部署到网络
- 第二单元:页面
- 创建你的第一个 Astro 页面
- 编写你的第一篇 Markdown 博客文章
- 添加「关于你」的动态内容
- 给你的「关于」页面添加样式
- 应用全局样式
- 第三单元:组件
- 创建一个可重复使用的导航组件
- 创建社交媒体 footer
- 自己动手搭建导航 Header
- 编写你的第一个浏览器脚本
- 第四单元:布局
- 编写你的第一个布局
- 创建并传递数据到博客布局
- 布局结合,两全其美
- 第五单元 - Astro API
- 创建文章存档页
- 生成标签页面
- 编写标签索引页面
- 添加 RSS 订阅源
- 第六单元 - Astro 群岛
- 搭建你的第一个 Astro 岛屿
- 回到干燥的陆地。让你的博客从白天到黑夜,无需岛屿!
- 恭喜你!
- @astrojs/mdx
- 添加阅读时间
- 创建开发者工具栏应用
- @astrojs/alpinejs
- @astrojs/lit
- @astrojs/preact
- @astrojs/react
- @astrojs/solid-js
- @astrojs/svelte
- @astrojs/vue
- @astrojs/cloudflare
- @astrojs/netlify
- @astrojs/node
- @astrojs/vercel
- @astrojs/db
- @astrojs/markdoc
- @astrojs/partytown
- @astrojs/sitemap
- @astrojs/tailwind
- 使用流式处理来提升页面性能
- 从 Gatsby 迁移
- 从 Next.js 迁移
- 从 NuxtJS 迁移
- 从 Docusaurus 迁移到 Astro
- 从 Eleventy 迁移到 Astro
- 从 GitBook 迁移到 Astro
- 从Gridsome迁移到Astro
- 从 Hugo 迁移
- 从 Jekyll 迁移
- 从 Pelican 迁移
- 从 SvelteKit 迁移
- 从VuePress迁移
- 从 WordPress 迁移
- 状态共享
- Storyblok 与 Astro
- Contentful 与 Astro
- ButterCMS & Astro
- Builder.io & Astro
- Cosmic 与 Astro
- DatoCMS 与 Astro
- Front Matter CMS 与 Astro
- Ghost & Astro
- Hashnode & Astro
- Hygraph 与 Astro
- Keystatic & Astro
- Kontent.ai 与 Astro
- 无头模式的 Statamic 与 Astro
- Strapi 与 Astro
- Tina CMS 与 Astro
- Umbraco & Astro
- 无头(headless)模式的 WordPress 与 Astro
- ApostropheCMS 与 Astro
- Caisy & Astro
- CloudCannon与Astro
- Crystallize 与 Astro
- Decap CMS 与 Astro
- Directus 与 Astro
- KeystoneJS 与 Astro
- microCMS & Astro
- Payload CMS 与 Astro
- Prepr CMS & Astro
- Prismic & Astro
- Sanity & Astro
- Sitecore 体验管理器 & Astro
- Spinal & Astro
- 创作内容
- Firebase 与 Astro
- Supabase 与 Astro
- Turso 和 Astro
- Xata 与 Astro
- Appwrite & Astro
- 部署你的 Astro 站点至 Netlify
- 部署你的 Astro 站点至 Vercel
- 如何将你的 Astro 网站部署到 Deno
- 部署你的 Astro 站点至 GitHub Pages
- 部署你的 Astro 站点至 GitLab Pages
- 部署你的 Astro 站点至 Cloudflare Pages
- 将你的 Astro 网站部署到 AWS
- 将你的 Astro 网站通过 Flightcontrol 部署到 AWS
- 将你的 Astro 网站通过 SST 部署到 AWS
- 将你的 Astro 网站部署至 Google Cloud
- 部署你的 Astro 站点至 Google Firebase 托管
- 将你的 Astro 网站部署到 Heroku
- 将你的 Astro 网站部署到 Microsoft Azure
- 部署你的 Astro 站点至 Buddy
- 将你的 Astro 网站部署到 Edgio
- 将你的 Astro 站点部署到 Fly.io
- 将你的 Astro 网站部署到 Render
- 将你的 Astro 网站部署到 Stormkit
- 将你的 Astro 网站部署到 Surge
- 通过 Cleavr 部署你的 Astro 网站
- 将你的 Astro 站点部署到 Kinsta 应用托管
- 将你的 Astro 网站部署到 Space
- 将你的 Astro 站点部署到 Zeabur
- 将你的 Astro 网站部署到 Zerops
- 添加 RSS 摘要
- 安装一个 Vite 或 Rollup 插件
- 构建自定义图像组件
- 使用 API 路由构建表单
- 在 Astro 页面中构建 HTML 表单
- 在 Astro 中使用 Bun
- 调用服务器端点
- 校验验证码
- 用 Docker 来构建你的 Astro 网站
- 动态导入图片
- 为链接添加图标
- 添加 i18n 功能
- 添加最后修改时间
- 在 Astro 组件中共享状态
- 使用 Tailwind Typography 美化渲染后的 Markdown
- Unknown compiler error.
- Astro.redirect is not available in static mode.
- Astro.clientAddress is not available in current adapter.
- Astro.clientAddress cannot be used inside prerendered routes.
- Astro.clientAddress is not available in static mode.
- No static path found for requested path.
- Invalid type returned by Astro page.
- Missing value for client:media directive.
- No matching renderer found.
- No client entrypoint specified in renderer.
- Missing hint on client:only directive.
- Invalid value returned by a getStaticPaths path.
- Invalid entry inside getStaticPath's return value
- Invalid value returned by getStaticPaths.
- getStaticPaths RSS helper is not available anymore.
- Missing params property on getStaticPaths route.
- Invalid value for getStaticPaths route parameter.
- getStaticPaths() function required for dynamic routes.
- Invalid slot name.
- Cannot use Server-side Rendering without an adapter.
- No import found for component.
- Invalid prerender export.
- Invalid component arguments.
- Page number param not found.
- Image missing required "alt" property.
- Error while loading image service.
- Missing image dimensions
- Failed to retrieve remote image dimensions
- Unsupported image format
- Unsupported image conversion
- Prerendered dynamic endpoint has path collision.
- Expected src to be an image.
- Expected image options.
- Cannot set both densities and widths
- Image not found.
- Could not process image metadata.
- Image not found.
- Could not transform image.
- Unable to set response.
- The middleware didn't return a Response.
- The middleware returned something that is not a Response object.
- The endpoint did not return a Response.
- Value assigned to locals is not accepted.
- Astro.response.headers must not be reassigned.
- Can't load the middleware.
- Local images must be imported.
- Astro.glob() used outside of an Astro file.
- Astro.glob() did not match any files.
- A redirect must be given a location with the Location header.
- Invalid dynamic route.
- Could not find Sharp.
- Unknown Vite Error.
- Could not import file.
- Invalid glob pattern.
- Astro couldn't find the correct page to render
- The provided locale does not exist.
- Index page not found.
- You can't use the current function with the current strategy
- Prerendered routes aren't supported when internationalization domains are enabled.
- 启用了手动国际化路由但没有提供中间件。
- Astro can't render the route.
- Unhandled rejection
- i18n Not Enabled
- Route not found.
- Unknown CSS Error
- CSS Syntax Error
- Unknown Markdown Error.
- Failed to parse Markdown frontmatter.
- Invalid frontmatter injection.
- MDX integration missing.
- Unknown configuration error.
- Specified configuration file not found.
- Legacy configuration detected.
- Unknown CLI Error.
- Failed to generate content types.
- Unknown Content Collection Error.
- Content entry frontmatter does not match schema.
- Invalid content entry slug.
- Content Schema should not contain slug.
- Collection does not exist
- Content and data cannot be in same collection.
- Collection contains entries of a different type.
- Data collection entry failed to parse.
- Duplicate content entry slug.
- Actions must be used with server output.
- Unsupported transform in content config.
@astrojs/vercel
此适配器允许 Astro 将你的hybrid
或 server
渲染站点 部署到Vercel。
如果你使用 Astro 作为 静态
站点生成器,只有当你使用额外的 Vercel 服务时(例如 Vercel 网络分析,Vercel 图像优化),你才需要这个适配器。否则,你不需要适配器来部署你的 静态
站点。
在我们的 Vercel 部署指南 中学习和部署你的 Astro 站点。
为什么选择 Astro Vercel
Vercel 是一个部署平台,它允许你通过直接连接到 GitHub 仓库来托管你的站点。这个适配器增强了 Astro 的构建过程,为通过 Vercel 进行部署做好了准备。
安装
Astro 包含了一个 astro add
命令,用于自动设置官方集成。如果你愿意,也可以手动安装集成。
在 Astro 项目中使用以下 asrto add
命令添加 Vercel 适配器,以启用 SSR。这将安装 @astrojs/vercel
并一步到位地对你的 astro.config.mjs
文件进行相应的更改。
- npm
- pnpm
- Yarn
npx astro add vercel
pnpm astro add vercel
yarn astro add vercel
手动安装
首先,使用适合你的包管理器,将 @astrojs/vercel
适配器添加到你项目的依赖项中:
- npm
- pnpm
- Yarn
npm install @astrojs/vercel
pnpm add @astrojs/vercel
yarn add @astrojs/vercel
然后,将适配器和你想要的按需渲染模式添加到你的 astro.config.*
文件中:
import { defineConfig } from 'astro/config';import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ... output: 'server', adapter: vercel(),
});
选择目标
你可以部署到不同的目标:
serverless
:在 Node.js 函数内进行服务端渲染。static
:生成一个遵循 Vercel 输出格式、重定向等的静态网站。
你可以通过改变导入来切换目标:
import vercel from '@astrojs/vercel/serverless';
import vercel from '@astrojs/vercel/static';
用法
了解更多关于 将项目部署到 Vercel 的信息。你可以通过 CLI ( vercel deploy
) 或者通过 Vercel 控制台 连接到你的新仓库进行部署。或者,你可以在本地创建生产版本构建:
astro build
vercel deploy --prebuilt
配置
要配置这个适配器,将一个对象传递给 astro.config.mjs
中的 vercel()
函数调用:
webAnalytics
类型: VercelWebAnalyticsConfig
适用于: Serverless, Static
@astrojs/vercel@3.8.0
你可以通过设置 webAnalytics: { enabled: true }
来启用 Vercel Web Analytics。这将在所有页面中注入 Vercel 的跟踪脚本。
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ webAnalytics: { enabled: true, },
}),
});
imagesConfig
类型: VercelImageConfig
适用于: Serverless, Static
@astrojs/vercel@3.3.0
Vercel 的图片优化 API 选项。查看 Vercel 的图片优化配置文档以获取支持的参数的完整列表。
domains
和 remotePatterns
属性将自动使用 Astro 对应的 image
设置 来填充。
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/static';
export default defineConfig({
// ...
output: 'static',
adapter: vercel({ imagesConfig: { sizes: [320, 640, 1280], },
}),
});
imageService
类型: boolean
适用于: Serverless, Static
@astrojs/vercel@3.3.0
启用后,在生产中会自动配置并使用由 Vercel Image Optimization API 提供支持的图像服务 。在开发中,将使用由 devImageService
指定的图像服务。
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/static';
export default defineConfig({
// ...
output: 'static',
adapter: vercel({ imageService: true,
}),
});
src/pages/index.astro---
import { Image } from 'astro:assets';
import astroLogo from '../assets/logo.png';
---
<!-- 这里的组件 -->
<Image src={astroLogo} alt="My super logo!" />
<!-- 将会被编译成如下 HTML -->
<img
src="/_vercel/image?url=_astro/logo.hash.png&w=...&q=..."
alt="My super logo!"
loading="lazy"
decoding="async"
width="..."
height="..."
/>
devImageService
类型: 'sharp' | 'squoosh' | string
适用于: Serverless, Static
@astrojs/vercel@3.8.0
默认值: sharp
当 imageService 启用时,允许你在开发中配置使用哪个图像服务。如果你无法在开发机器上安装 Sharp 的依赖项,但使用另一个图像服务(如 Squoosh)可以让你在开发环境中预览图像,这可能很有用。但构建不会受其影响,将始终使用 Vercel 的图像优化。
它也可以设置为任意值,以使用自定义图像服务而不是 Astro 的内置图像服务。
astro.config.mjsimport { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ imageService: true, devImageService: 'squoosh',
}),
});
isr
类型: boolean | VercelISRConfig
适用于: Serverless
@astrojs/vercel@7.2.0
默认值: false
允许你的项目作为一个 ISR (增量式静态再生) 功能部署,这个功能以首次请求后预渲染页面相同的方式缓存你按需渲染的页面。
要启用此功能,在你的 astro.config.mjs
中的 Vercel 适配器配置里将 isr
设置为 true:
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ isr: true,
}),
});
请注意,ISR 功能请求不包括搜索参数,这与静态模式下的 请求 类似。
ISR 缓存失效
默认情况下,ISR 函数会在你的部署期间进行缓存。你可以通过设置过期时间,或者完全排除特定路由不进行缓存,来进一步控制缓存。
基于时间的失效
你可以通过配置秒为单位的 expiration
值来改变缓存路由的时间长度:
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ isr: { // 在首次请求时缓存所有页面,并保存 1 天 expiration: 60 * 60 * 24, },
}),
});
从缓存中排除路径
要实现 Vercel 的草稿模式或按需增量式静态再生 (ISR),你可以创建一个绕过令牌,并将其连同任何要从缓存中排除的路由一起提供给 isr
配置:
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: "server",
adapter: vercel({ isr: { // 你创建的一个秘密随机字符串。 bypassToken: "005556d774a8", // 总是提供最新内容的路径。 exclude: [ "/api/invalidate", "/posts/[...slug]" ] }
})
})
includeFiles
类型: string[]
适用于: Serverless
使用此属性来强制将文件与你的函数打包在一起。当你发现缺失文件时,这很有帮助。
astro.config.mjsimport { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ includeFiles: ['./my-data.json'],
}),
});
excludeFiles
类型: string[]
适用于: Serverless
使用此属性来从打包过程中排除任何会被包含的文件。
astro.config.mjsimport { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ excludeFiles: ['./src/some_big_file.jpg'],
}),
});
maxDuration
类型: number
适用于: Serverless
使用这个属性来延长或限制无服务器函数运行的最长持续时间(以秒为单位),直到超时。请参阅 Vercel 文档 获取你的账号计划的默认和最大时限。
astro.config.mjsimport { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: "server",
adapter: vercel({ maxDuration: 60
}),
});
skewProtection
类型: boolean
适用于: Serverless
@astrojs/vercel@7.6.0
新使用此属性启用 Vercel Skew protection(适用于 Vercel Pro 和企业账户)。
astro.config.mjsimport { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: "server",
adapter: vercel({ skewProtection: true
}),
});
函数打包配置
Vercel 适配器默认将所有路由组合成一个函数。
你也可以使用 functionPerRoute
选项将构建拆分为每个路由一个函数。这样可以减少每个函数的大小,这意味着你不太可能超过单个函数的大小限制。并且,代码启动更快。
在启用 functionPerRoute
前请查验你的 Vercel 计划是否包含足够数量的函数。例如,Vercel 的免费计划限制每个部署拥有不超过 12 个函数。如果你的 Vercel 计划不足以满足项目中的路由数量,你将在部署过程中收到错误消息。
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({ functionPerRoute: true,
}),
});
在 Vercel Edge 函数上运行 Astro 中间件
@astrojs/vercel/serverless
适配器可以根据你代码库中的 Astro 中间件创建一个 边缘函数。当启用 edgeMiddleware
时,边缘函数将为包括静态资源、预渲染页面和按需渲染页面在内的所有请求执行你的中间件代码。
对于按需渲染的页面,context.locals
对象会被 JSON 序列化并通过标头发送给无服务器函数,由该函数执行渲染。作为安全措施,除非请求来自生成的边缘函数,否则无服务器函数将拒绝服务,并返回 403 Forbidden
响应。
这是一个选择性功能。要启用它,请将 edgeMiddleware
设置为 true
:
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
// ...
output: 'server',
adapter: vercel({
edgeMiddleware: true,
}),
});
边缘中间件可以用 ctx.locals.vercel.edge
访问 Vercel 的 RequestContext
。如果你正在使用 TypeScript,可以通过更新 src/env.d.ts
来使用 EdgeLocals
获得正确的类型定义:
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
type EdgeLocals = import('@astrojs/vercel').EdgeLocals
declare namespace App {
interface Locals extends EdgeLocals {
// ...
}
}
Node.js 版本支持
@astrojs/vercel
适配器支持特定的 Node.js 版本,用于在 Vercel 上部署 Astro 项目。要在 Vercel 上查看受支持的 Node.js 版本,请单击项目的设置选项卡,然后向下滚动到 “Node.js版本” 部分。
查看Vercel文档了解更多信息。
更多集成
UI 框架
@astrojs/
alpinejs @astrojs/
lit @astrojs/
preact @astrojs/
react @astrojs/
solid-js @astrojs/
svelte @astrojs/
vue
SSR 适配器
其他集成
Recipes如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论