0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-01-27 22:19:04 -05:00
astro/.changeset/flat-snakes-hammer.md
Arsh e2fe51c828
feat(vercel): ISR (#9714)
* 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>
2024-02-07 19:06:37 +05:30

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" ] 
        }
    })
})