Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix dev server ignores ENOENT error when loading page #65213

Open
wants to merge 2 commits into
base: canary
Choose a base branch
from

Conversation

lukahartwig
Copy link
Member

The dev server ignores ENOENT errors when loading a page which can easily happen if you try to read a file and mess up the path.

import { readFileSync } from "fs";

const nope = readFileSync("notavailable.txt", "utf8").split("\n");

export function GET() {
  return new Response("Hello, world!", {
    status: 200,
  });
}

The dev server treats this as 404 which is quite confusing.

This issue was fixed previously in #37486 but only for prod.

Closes NEXT-3188
Fixes #53792

@ijjk
Copy link
Member

ijjk commented Apr 30, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
buildDuration 15.3s 13.9s N/A
buildDurationCached 8.2s 7.2s N/A
nodeModulesSize 360 MB 360 MB N/A
nextStartRea..uration (ms) 406ms 417ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
1103-HASH.js gzip 31.9 kB 31.9 kB N/A
1a9f679d-HASH.js gzip 53.5 kB 53.5 kB N/A
335-HASH.js gzip 5.05 kB 5.05 kB
7953.HASH.js gzip 169 B 169 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 230 B 229 B N/A
main-HASH.js gzip 31.6 kB 31.6 kB N/A
webpack-HASH.js gzip 1.65 kB 1.65 kB N/A
Overall change 50.4 kB 50.4 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
_app-HASH.js gzip 192 B 193 B N/A
_error-HASH.js gzip 192 B 193 B N/A
amp-HASH.js gzip 507 B 511 B N/A
css-HASH.js gzip 341 B 343 B N/A
dynamic-HASH.js gzip 2.52 kB 2.52 kB
edge-ssr-HASH.js gzip 266 B 265 B N/A
head-HASH.js gzip 362 B 365 B N/A
hooks-HASH.js gzip 392 B 392 B
image-HASH.js gzip 4.27 kB 4.27 kB
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.69 kB 2.7 kB N/A
routerDirect..HASH.js gzip 329 B 328 B N/A
script-HASH.js gzip 397 B 397 B
withRouter-HASH.js gzip 324 B 324 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
index.html gzip 527 B 527 B
link.html gzip 540 B 541 B N/A
withRouter.html gzip 523 B 524 B N/A
Overall change 527 B 527 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
edge-ssr.js gzip 94.8 kB 94.8 kB N/A
page.js gzip 182 kB 182 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
middleware-b..fest.js gzip 624 B 623 B N/A
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 25.7 kB 25.7 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 995 B 995 B
Next Runtimes
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
app-page-exp...dev.js gzip 171 kB 171 kB
app-page-exp..prod.js gzip 98.8 kB 98.8 kB
app-page-tur..prod.js gzip 100 kB 100 kB
app-page-tur..prod.js gzip 94.6 kB 94.6 kB
app-page.run...dev.js gzip 157 kB 157 kB
app-page.run..prod.js gzip 93.3 kB 93.3 kB
app-route-ex...dev.js gzip 21.5 kB 21.5 kB
app-route-ex..prod.js gzip 15.3 kB 15.3 kB
app-route-tu..prod.js gzip 15.3 kB 15.3 kB
app-route-tu..prod.js gzip 15 kB 15 kB
app-route.ru...dev.js gzip 21.3 kB 21.3 kB
app-route.ru..prod.js gzip 15 kB 15 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 21.5 kB 21.5 kB
pages.runtim...dev.js gzip 22.1 kB 22.1 kB
pages.runtim..prod.js gzip 21.5 kB 21.5 kB
server.runti..prod.js gzip 51.7 kB 51.7 kB
Overall change 964 kB 964 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js luka/next-3188-enoent-error-ignored-in-dev Change
0.pack gzip 1.62 MB 1.62 MB ⚠️ +135 B
index.pack gzip 114 kB 113 kB N/A
Overall change 1.62 MB 1.62 MB ⚠️ +135 B
Diff details
Diff for edge-ssr.js

Diff too large to display

Commit: dddd6c8

@ijjk
Copy link
Member

ijjk commented Apr 30, 2024

Failing test suites

Commit: dddd6c8

pnpm test-dev test/development/acceptance/server-component-compiler-errors-in-pages.test.ts

  • Error Overlay for server components compiler errors in pages > importing 'server-only' in pages
Expand output

● Error Overlay for server components compiler errors in pages › importing 'server-only' in pages

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error Overlay for server components compiler errors in pages importing 'server-only' in pages 1`

- Snapshot  - 1
+ Received  + 0

@@ -12,6 +12,5 @@
   4 |   return 'hello world'
     `----

  Import trace for requested module:
  ./components/Comp.js
- ./pages/index.js

  129 |     } else {
  130 |       expect(next.normalizeTestDirContent(await session.getRedboxSource()))
> 131 |         .toMatchInlineSnapshot(`
      |          ^
  132 |         "./components/Comp.js
  133 |         Error: 
  134 |           x You're importing a component that needs server-only. That only works in a Server Component which is not supported in the pages/ directory. Read more: https://nextjs.org/docs/getting-started/

  at Object.toMatchInlineSnapshot (development/acceptance/server-component-compiler-errors-in-pages.test.ts:131:10)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/next-image-legacy/default/test/index.test.ts

  • Image Component Tests > development mode > should load the images
  • Image Component Tests > development mode > should preload priority images
  • Image Component Tests > development mode > should callback onLoadingComplete when image is fully loaded
  • Image Component Tests > development mode > should callback native onLoad in most cases
  • Image Component Tests > development mode > should callback native onError when error occurred while loading image
  • Image Component Tests > development mode > should warn when img with layout=responsive is inside flex container
  • Image Component Tests > development mode > should warn when priority prop is missing on LCP image
  • Image Component Tests > development mode > should warn at most once even after state change
  • Image Component Tests > development mode > should correctly ignore prose styles
  • Image Component Tests > development mode > should emit image for next/dynamic with non ssr case
  • Image Component Tests > development mode > should re-lazyload images after src changes
  • Image Component Tests > development mode > should initially load only two of four images using lazyroot
Expand output

● Image Component Tests › development mode › should load the images

TIMED OUT: /result-correct/

undefined

Error: Incorrectly loaded image

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:79:7)

● Image Component Tests › development mode › should preload priority images

TIMED OUT: /result-correct/

undefined

Error: Incorrectly loaded image

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:109:7)

● Image Component Tests › development mode › should callback onLoadingComplete when image is fully loaded

TIMED OUT: loaded 1 img1 with dimensions 128x128

[LOADING]

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:261:7)

● Image Component Tests › development mode › should callback native onLoad in most cases

TIMED OUT: loaded 1 img1 with native onLoad

[LOADING]

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:350:5)

● Image Component Tests › development mode › should callback native onError when error occurred while loading image

TIMED OUT: no error occurred

error occurred while loading img1

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:413:5)

● Image Component Tests › development mode › should warn when img with layout=responsive is inside flex container

TIMED OUT: /Image with src (.*)jpg(.*) may not render properly as a child of a flex container. Consider wrapping the image with a div to configure the width/gm

%cDownload the React DevTools for a better development experience: https://reactjs.org/link/react-devtools font-weight:bold
[HMR] connected
connected to ws at ws://localhost:37797/_next/webpack-hmr
received ws message {"action":"sync","hash":"78803a457fea28ab","errors":[],"warnings":[],"versionInfo":{"staleness":"fresh","installed":"14.3.0-canary.39"}}
Next.js page already hydrated
Failed to load resource: the server responded with a status of 400 (Bad Request)

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:861:7)

● Image Component Tests › development mode › should warn when priority prop is missing on LCP image

TIMED OUT: done

undefined

Error: Image not ready

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:921:9)

● Image Component Tests › development mode › should warn at most once even after state change

TIMED OUT: done

undefined

Error: Image not loaded

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:1021:7)

● Image Component Tests › development mode › should correctly ignore prose styles

TIMED OUT: /result-correct/

undefined

Error: Image not ready

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:1059:7)

● Image Component Tests › development mode › should emit image for next/dynamic with non ssr case

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  1154 |   })
  1155 |
> 1156 |   it('should emit image for next/dynamic with non ssr case', async () => {
       |   ^
  1157 |     let browser = await webdriver(appPort, '/dynamic-static-img')
  1158 |     const img = await browser.elementById('dynamic-loaded-static-jpg')
  1159 |     const src = await img.getAttribute('src')

  at it (integration/next-image-legacy/default/test/index.test.ts:1156:3)
  at runTests (integration/next-image-legacy/default/test/index.test.ts:1483:7)
  at integration/next-image-legacy/default/test/index.test.ts:1472:58
  at Object.describe (integration/next-image-legacy/default/test/index.test.ts:1471:1)

● Image Component Tests › development mode › should re-lazyload images after src changes

TIMED OUT: /result-correct/

undefined

Error: Incorrectly loaded image

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:1299:7)

● Image Component Tests › development mode › should initially load only two of four images using lazyroot

TIMED OUT: /result-correct/

undefined

Error: Incorrectly loaded image

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (integration/next-image-legacy/default/test/index.test.ts:1393:7)

Read more about building and testing Next.js in contributing.md.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Dev server does not show error when registering route handler
2 participants