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

Serialize JSON Warnings Before Event #11976

Merged
merged 1 commit into from
Apr 17, 2020

Conversation

Timer
Copy link
Member

@Timer Timer commented Apr 17, 2020

This fixes an edge-case where a webpack plugin that emits non-JSON serializable errors into the warnings object.

To fix this, we use webpack's special .toJson helper which knows how to serialize common cases of this.

[ info ]  ready on http://localhost:3000
(node:64229) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'NormalModule'
    |     property 'dependencies' -> object with constructor 'Array'
    |     index 0 -> object with constructor 'CommonJsRequireDependency'
    |     ...
    |     index 0 -> object with constructor 'ModuleReason'
    --- property 'module' closes the circle
    at JSON.stringify (<anonymous>)
    at /Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/compiled/webpack-hot-middleware/middleware.js:1:2018
    at /Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/compiled/webpack-hot-middleware/middleware.js:1:1337
    at Array.forEach (<anonymous>)
    at everyClient (/Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/compiled/webpack-hot-middleware/middleware.js:1:1317)
    at Object.publish (/Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/compiled/webpack-hot-middleware/middleware.js:1:1972)
    at Function.o.publish (/Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/compiled/webpack-hot-middleware/middleware.js:1:1154)
    at HotReloader.send (/Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/server/hot-reloader.js:5:678)
    at /Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/server/hot-reloader.js:15:508
    at /Users/joe/Documents/Development/Work/zeit/next.js/packages/next/dist/build/output/index.js:5:651
(node:64229) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 42)

Closes #8601

@ijjk
Copy link
Member

ijjk commented Apr 17, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
buildDuration 12.2s 12.2s -7ms
nodeModulesSize 55.5 MB 55.5 MB ⚠️ +169 B
Page Load Tests Overall decrease ⚠️
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
/ failed reqs 0 0
/ total time (seconds) 2.067 2.156 ⚠️ +0.09
/ avg req/sec 1209.68 1159.8 -49.88
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.261 1.312 ⚠️ +0.05
/error-in-render avg req/sec 1982.6 1905.18 -77.42
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
main-HASH.js gzip 6.25 kB 6.25 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5e5e.js gzip 10.3 kB 10.3 kB
framework.a1..NSE.txt gzip 220 B 220 B
framework.a1..NSE.txt gzip 220 B 220 B
framework.HASH.js gzip 39 kB 39 kB
Overall change 56.7 kB 56.7 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
main-HASH.module.js gzip 4.79 kB 4.79 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.85 kB 6.85 kB
framework.HA..dule.js gzip 39 kB 39 kB
Overall change 51.4 kB 51.4 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
polyfills-HASH.js gzip 26.2 kB 26.2 kB
Overall change 26.2 kB 26.2 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_app.js gzip 1.24 kB 1.24 kB
_error.js gzip 3.12 kB 3.12 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.86 kB 7.86 kB
Client Pages Modern
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_app.module.js gzip 602 B 602 B
_error.module.js gzip 2.09 kB 2.09 kB
hooks.module.js gzip 383 B 383 B
index.module.js gzip 223 B 223 B
link.module.js gzip 1.52 kB 1.52 kB
routerDirect..dule.js gzip 281 B 281 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.38 kB 5.38 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
index.html gzip 929 B 929 B
link.html gzip 938 B 938 B
withRouter.html gzip 927 B 927 B
Overall change 2.79 kB 2.79 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
buildDuration 13.1s 12.9s -146ms
nodeModulesSize 55.5 MB 55.5 MB ⚠️ +169 B
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
main-HASH.js gzip 6.25 kB 6.25 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5e5e.js gzip 10.3 kB 10.3 kB
framework.a1..NSE.txt gzip 220 B 220 B
framework.a1..NSE.txt gzip 220 B 220 B
framework.HASH.js gzip 39 kB 39 kB
Overall change 56.7 kB 56.7 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
main-HASH.module.js gzip 4.79 kB 4.79 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.85 kB 6.85 kB
framework.HA..dule.js gzip 39 kB 39 kB
Overall change 51.4 kB 51.4 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
polyfills-HASH.js gzip 26.2 kB 26.2 kB
Overall change 26.2 kB 26.2 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_app.js gzip 1.24 kB 1.24 kB
_error.js gzip 3.12 kB 3.12 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.86 kB 7.86 kB
Client Pages Modern
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_app.module.js gzip 602 B 602 B
_error.module.js gzip 2.09 kB 2.09 kB
hooks.module.js gzip 383 B 383 B
index.module.js gzip 223 B 223 B
link.module.js gzip 1.52 kB 1.52 kB
routerDirect..dule.js gzip 281 B 281 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.38 kB 5.38 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary Timer/next.js hotfix/serialize-warnings Change
_error.js 558 kB 558 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.81 kB 3.81 kB
index.js 558 kB 558 kB
link.js 594 kB 594 kB
routerDirect.js 587 kB 587 kB
withRouter.js 587 kB 587 kB
Overall change 2.89 MB 2.89 MB

@Timer Timer merged commit 48e2c19 into vercel:canary Apr 17, 2020
@Timer Timer deleted the hotfix/serialize-warnings branch April 17, 2020 17:39
@Timer Timer added this to the 9.3.6 milestone Apr 17, 2020
@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
2 participants