Add warnings for static generation bail outs (#53761)
Currently using server actions on a page or using edge runtime causes that page to bail out of ISR or static generation so this adds warnings to make users aware of this. x-ref: [slack thread](https://vercel.slack.com/archives/C03KAR5DCKC/p1690816539472449) --------- Co-authored-by: Zack Tanner <zacktanner@gmail.com>
This commit is contained in:
parent
5c9553002c
commit
4b4533787b
2 changed files with 43 additions and 23 deletions
|
@ -1570,6 +1570,10 @@ export default async function build(
|
|||
if (isEdgeRuntime(pageRuntime)) {
|
||||
isStatic = false
|
||||
isSsg = false
|
||||
|
||||
Log.warnOnce(
|
||||
`Using edge runtime on a page currently disables static generation for that page`
|
||||
)
|
||||
} else {
|
||||
// If a page has action and it is static, we need to
|
||||
// change it to SSG to keep the worker created.
|
||||
|
@ -1596,30 +1600,38 @@ export default async function build(
|
|||
}
|
||||
|
||||
const appConfig = workerResult.appConfig || {}
|
||||
if (appConfig.revalidate !== 0 && !hasAction) {
|
||||
const isDynamic = isDynamicRoute(page)
|
||||
const hasGenerateStaticParams =
|
||||
!!workerResult.prerenderRoutes?.length
|
||||
if (appConfig.revalidate !== 0) {
|
||||
if (hasAction) {
|
||||
Log.warnOnce(
|
||||
`Using server actions on a page currently disables static generation for that page`
|
||||
)
|
||||
} else {
|
||||
const isDynamic = isDynamicRoute(page)
|
||||
const hasGenerateStaticParams =
|
||||
!!workerResult.prerenderRoutes?.length
|
||||
|
||||
if (
|
||||
// Mark the app as static if:
|
||||
// - It has no dynamic param
|
||||
// - It doesn't have generateStaticParams but `dynamic` is set to
|
||||
// `error` or `force-static`
|
||||
!isDynamic
|
||||
) {
|
||||
appStaticPaths.set(originalAppPath, [page])
|
||||
appStaticPathsEncoded.set(originalAppPath, [page])
|
||||
isStatic = true
|
||||
} else if (
|
||||
isDynamic &&
|
||||
!hasGenerateStaticParams &&
|
||||
(appConfig.dynamic === 'error' ||
|
||||
appConfig.dynamic === 'force-static')
|
||||
) {
|
||||
appStaticPaths.set(originalAppPath, [])
|
||||
appStaticPathsEncoded.set(originalAppPath, [])
|
||||
isStatic = true
|
||||
if (
|
||||
// Mark the app as static if:
|
||||
// - It has no dynamic param
|
||||
// - It doesn't have generateStaticParams but `dynamic` is set to
|
||||
// `error` or `force-static`
|
||||
!isDynamic
|
||||
) {
|
||||
appStaticPaths.set(originalAppPath, [page])
|
||||
appStaticPathsEncoded.set(originalAppPath, [
|
||||
page,
|
||||
])
|
||||
isStatic = true
|
||||
} else if (
|
||||
isDynamic &&
|
||||
!hasGenerateStaticParams &&
|
||||
(appConfig.dynamic === 'error' ||
|
||||
appConfig.dynamic === 'force-static')
|
||||
) {
|
||||
appStaticPaths.set(originalAppPath, [])
|
||||
appStaticPathsEncoded.set(originalAppPath, [])
|
||||
isStatic = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,14 @@ createNextDescribe(
|
|||
},
|
||||
},
|
||||
({ next, isNextDev, isNextStart, isNextDeploy }) => {
|
||||
if (isNextStart) {
|
||||
it('should warn for server actions + ISR incompat', async () => {
|
||||
expect(next.cliOutput).toContain(
|
||||
'Using server actions on a page currently disables static generation for that page'
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
it('should handle basic actions correctly', async () => {
|
||||
const browser = await next.browser('/server')
|
||||
|
||||
|
|
Loading…
Reference in a new issue