* feat(vercel): isr * bypass token * exclusion of certain paths * add test * remove search params in dev mode * Apply suggestions from code review Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com> * Apply suggestions from code review * Apply suggestions from code review * fix missing await * escape src for regex * cleanup * revalidate -> expiration * update type docs * always exclude /_image * add changeset * Apply suggestions from code review * always create serverless function for /_image * Apply suggestions from code review Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * Apply suggestions from code review --------- Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com> Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
1.8 KiB
@astrojs/vercel |
---|
minor |
Introduces a new config option, isr
, that allows you to deploy your project as an ISR function. ISR (Incremental Static Regeneration) caches your on-demand rendered pages in the same way as prerendered pages after first request.
To enable this feature, set isr
to true in your Vercel adapter configuration in astro.config.mjs
:
export default defineConfig({
output: "server",
adapter: vercel({ isr: true })
})
Cache invalidation options
By default, ISR responses are cached for the duration of your deployment. You can further control caching by setting an expiration
time or prevent caching entirely for certain routes.
Time-based invalidation
You can change the length of time to cache routes this by configuring an expiration
value in seconds:
export default defineConfig({
output: "server",
adapter: vercel({
isr: {
// caches all pages on first request and saves for 1 day
expiration: 60 * 60 * 24
}
})
})
Manual invalidation
To implement Vercel's Draft mode, or On-Demand Incremental Static Regeneration (ISR), you can create a bypass token and provide it to the isr
config along with the paths to exclude from caching:
export default defineConfig({
output: "server",
adapter: vercel({
isr: {
// A secret random string that you create.
bypassToken: "005556d774a8",
// Paths that will always be served fresh.
exclude: [ "/api/invalidate" ]
}
})
})