Skip to content

Commit

Permalink
Add warning for edge with force-static (vercel#50182)
Browse files Browse the repository at this point in the history
Currently the edge runtime does not support static generation so this adds a warning when `force-static` is leveraged with `edge-runtime` as it will cause unexpected behavior. Support is being investigated so this isn't a hard error at the moment. 

x-ref: [slack thread](https://vercel.slack.com/archives/C03S8ED1DKM/p1684783403551589)
  • Loading branch information
ijjk authored and hydRAnger committed Jun 12, 2023
1 parent 2751b32 commit 45f91ff
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 1 deletion.
9 changes: 8 additions & 1 deletion packages/next/src/build/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1384,8 +1384,9 @@ export async function isPageStatic({
let prerenderFallback: boolean | 'blocking' | undefined
let appConfig: AppConfig = {}
let isClientComponent: boolean = false
const pathIsEdgeRuntime = isEdgeRuntime(pageRuntime)

if (isEdgeRuntime(pageRuntime)) {
if (pathIsEdgeRuntime) {
const runtime = await getRuntimeContext({
paths: edgeInfo.files.map((file: string) => path.join(distDir, file)),
env: edgeInfo.env,
Expand Down Expand Up @@ -1503,6 +1504,12 @@ export async function isPageStatic({
{}
)

if (appConfig.dynamic === 'force-static' && pathIsEdgeRuntime) {
Log.warn(
`Page "${page}" is using runtime = 'edge' which is currently incompatible with dynamic = 'force-static'. Please remove either "runtime" or "force-static" for correct behavior`
)
}

if (appConfig.dynamic === 'force-dynamic') {
appConfig.revalidate = 0
}
Expand Down
6 changes: 6 additions & 0 deletions test/e2e/app-dir/app-static/app-static.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,12 @@ createNextDescribe(
expect($2('#page-data').text()).toBe(pageData)
return 'success'
}, 'success')

if (isNextStart) {
expect(next.cliOutput).toContain(
`Page "/variable-revalidate-edge/revalidate-3" is using runtime = 'edge' which is currently incompatible with dynamic = 'force-static'. Please remove either "runtime" or "force-static" for correct behavior`
)
}
})

it('should honor fetch cache correctly (edge)', async () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { cache, use } from 'react'

export const runtime = 'experimental-edge'
export const dynamic = 'force-static'

export default function Page() {
const getData = cache(() =>
Expand Down

0 comments on commit 45f91ff

Please sign in to comment.