89ec21ed68
Currently Next.js exposes internal code in the error overlay if certain errors were created from the user code. Some examples were attached in #20776. We can clearly see that the path is wrong (`../next-server`), it should be `./node_modules/next/dist/next-server`: ![CleanShot 2021-03-19 at 01 33 04](https://user-images.githubusercontent.com/3676859/111670728-1ae7e400-8853-11eb-9213-3b359798900e.png) The root cause is the `__nextjs_original-stack-frame` middleware resolves the file path with the following code: ```js path.resolve( rootDirectory, getSourcePath(sourcePosition.source) ) ``` where `rootDirectory` is the **app root**, but `sourcePosition.source` comes from the module path, which is relative to the path of the `next` binary, not the app root. That explains why we see `../next-server` from the error above, because it's relative to `./node_modules/next/bin/next`. Because of that, the resolved result will never have `node_modules` in its path and it won't be filtered by the error overlay in the UI. Here's a screenshot of the frame object in the UI: ![CleanShot 2021-03-18 at 23 01 29@2x](https://user-images.githubusercontent.com/3676859/111670062-65b52c00-8852-11eb-9293-3a6e5b7c4b9b.png) And the filter we use to determine if a frame is expanded or not only depends on `body.originalStackFrame`: ```js expanded: !Boolean( body.originalStackFrame?.file?.includes('node_modules') ?? true ) ``` So this PR also adds `source.file` check to ensure they will be ignored (not necessary because we fixed the path resolving). Fixes #20776. |
||
---|---|---|
.. | ||
.stats-app | ||
acceptance | ||
eslint-plugin-next | ||
integration | ||
isolated | ||
lib | ||
package-managers/pnpm | ||
unit | ||
.babelrc | ||
.gitignore | ||
jest-environment.js | ||
jest-global-setup.js | ||
jest-global-teardown.js | ||
jest-setup-after-env.js | ||
test-file.txt | ||
tsconfig.json |