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

[Fast Refresh] Support client-side code being ran in Node #12426

Merged
merged 3 commits into from
May 3, 2020

Conversation

Timer
Copy link
Member

@Timer Timer commented May 3, 2020

Legacy webpack plugins (e.g. mini-css-extract-plugin, used by @zeit/next-sass) will run client-side only code in a Node.js context.

To support this, we need the Fast Refresh runtime to verify its in a client-side environment before executing.


Fixes #12304

@Timer Timer added this to the 9.3.7 milestone May 3, 2020
@ijjk
Copy link
Member

ijjk commented May 3, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
buildDuration 11.7s 11.8s ⚠️ +143ms
nodeModulesSize 57.5 MB 57.5 MB
Page Load Tests Overall increase ✓
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
/ failed reqs 0 0
/ total time (seconds) 2.032 2.033 0
/ avg req/sec 1230.15 1229.44 -0.71
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.382 1.334 -0.05
/error-in-render avg req/sec 1808.78 1873.93 ⚠️ +65.15
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.js gzip 6.28 kB 6.28 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5232.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.2 kB 39.2 kB
Overall change 57 kB 57 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.module.js gzip 4.82 kB 4.82 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.88 kB 6.88 kB
framework.HA..dule.js gzip 39.2 kB 39.2 kB
Overall change 51.7 kB 51.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
polyfills-HASH.js gzip 26.3 kB 26.3 kB
Overall change 26.3 kB 26.3 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
_app.js gzip 1.23 kB 1.23 kB
_error.js gzip 3.13 kB 3.13 kB
hooks.js gzip 663 B 663 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 280 B 280 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/support-bad-webpack-plugins Change
_app.module.js gzip 598 B 598 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 279 B 279 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins 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/support-bad-webpack-plugins Change
index.html gzip 927 B 927 B
link.html gzip 936 B 936 B
withRouter.html gzip 925 B 925 B
Overall change 2.79 kB 2.79 kB

Serverless Mode
General
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
buildDuration 12.7s 12.9s ⚠️ +232ms
nodeModulesSize 57.5 MB 57.5 MB
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.js gzip 6.28 kB 6.28 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5232.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.2 kB 39.2 kB
Overall change 57 kB 57 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.module.js gzip 4.82 kB 4.82 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.88 kB 6.88 kB
framework.HA..dule.js gzip 39.2 kB 39.2 kB
Overall change 51.7 kB 51.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
polyfills-HASH.js gzip 26.3 kB 26.3 kB
Overall change 26.3 kB 26.3 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
_app.js gzip 1.23 kB 1.23 kB
_error.js gzip 3.13 kB 3.13 kB
hooks.js gzip 663 B 663 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 280 B 280 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/support-bad-webpack-plugins Change
_app.module.js gzip 598 B 598 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 279 B 279 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins 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/support-bad-webpack-plugins Change
_error.js 853 kB 853 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.81 kB 3.81 kB
index.js 853 kB 853 kB
link.js 891 kB 891 kB
routerDirect.js 883 kB 883 kB
withRouter.js 883 kB 883 kB
Overall change 4.37 MB 4.37 MB

@ijjk
Copy link
Member

ijjk commented May 3, 2020

Failing test suites

test/acceptance/ReactRefresh.test.js

  • logbox: can recover from a component error

Expand output

● logbox: can recover from a component error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `logbox: can recover from a component error 1`

- Snapshot
+ Received

- child.js (4:14) @ Child
+ ../../../../packages/react-refresh-utils/internal/helpers.js (114:0) @ eval

-   2 |   // hello
+   112 | if (canApplyUpdate()) {
-   3 |   export default function Child() {
- > 4 |     throw new Error('oops')
-     |          ^
-   5 |   }
-   6 |·
+   113 |     try {
+ > 114 |         runtime_1["default"].performReactRefresh();
+   115 |     }
+   116 |     catch (err) {
+   117 |         console.warn('Warning: Failed to re-render. We will retry on the next Fast Refresh event.\n' +

  393 | 
  394 |   expect(await session.hasRedbox(true)).toBe(true)
> 395 |   expect(await session.getRedboxSource()).toMatchInlineSnapshot(`
      |                                           ^
  396 |     "child.js (4:14) @ Child
  397 | 
  398 |       2 |   // hello

  at Object.<anonymous> (acceptance/ReactRefresh.test.js:395:43)

@ijjk
Copy link
Member

ijjk commented May 3, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
buildDuration 12.6s 12.3s -270ms
nodeModulesSize 57.5 MB 57.5 MB
Page Load Tests Overall increase ✓
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
/ failed reqs 0 0
/ total time (seconds) 2.142 2.129 -0.01
/ avg req/sec 1167.13 1174.12 ⚠️ +6.99
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.442 1.399 -0.04
/error-in-render avg req/sec 1733.47 1787.55 ⚠️ +54.08
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.js gzip 6.28 kB 6.28 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5232.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.2 kB 39.2 kB
Overall change 57 kB 57 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.module.js gzip 4.82 kB 4.82 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.88 kB 6.88 kB
framework.HA..dule.js gzip 39.2 kB 39.2 kB
Overall change 51.7 kB 51.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
polyfills-HASH.js gzip 26.3 kB 26.3 kB
Overall change 26.3 kB 26.3 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
_app.js gzip 1.23 kB 1.23 kB
_error.js gzip 3.13 kB 3.13 kB
hooks.js gzip 663 B 663 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 280 B 280 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/support-bad-webpack-plugins Change
_app.module.js gzip 598 B 598 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 279 B 279 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins 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/support-bad-webpack-plugins Change
index.html gzip 927 B 927 B
link.html gzip 936 B 936 B
withRouter.html gzip 925 B 925 B
Overall change 2.79 kB 2.79 kB

Serverless Mode
General
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
buildDuration 13.5s 13.6s ⚠️ +96ms
nodeModulesSize 57.5 MB 57.5 MB
Client Bundles (main, webpack, commons)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.js gzip 6.28 kB 6.28 kB
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..5232.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.2 kB 39.2 kB
Overall change 57 kB 57 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
main-HASH.module.js gzip 4.82 kB 4.82 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.88 kB 6.88 kB
framework.HA..dule.js gzip 39.2 kB 39.2 kB
Overall change 51.7 kB 51.7 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
polyfills-HASH.js gzip 26.3 kB 26.3 kB
Overall change 26.3 kB 26.3 kB
Client Pages
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins Change
_app.js gzip 1.23 kB 1.23 kB
_error.js gzip 3.13 kB 3.13 kB
hooks.js gzip 663 B 663 B
index.js gzip 222 B 222 B
link.js gzip 2.06 kB 2.06 kB
routerDirect.js gzip 280 B 280 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/support-bad-webpack-plugins Change
_app.module.js gzip 598 B 598 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 279 B 279 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
zeit/next.js canary Timer/next.js hotfix/support-bad-webpack-plugins 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/support-bad-webpack-plugins Change
_error.js 853 kB 853 kB
404.html 4.18 kB 4.18 kB
hooks.html 3.81 kB 3.81 kB
index.js 853 kB 853 kB
link.js 891 kB 891 kB
routerDirect.js 883 kB 883 kB
withRouter.js 883 kB 883 kB
Overall change 4.37 MB 4.37 MB

@Timer Timer added Upstream Related to using Next.js with a third-party dependency. (e.g., React, UI/icon libraries, etc.). Type: Bug labels May 3, 2020
@Timer Timer changed the title [Fast Refresh] Support client-side code being ran in Node.js context [Fast Refresh] Support client-side code being ran in Node May 3, 2020
@Timer Timer merged commit 92ad5c0 into vercel:canary May 3, 2020
@Timer Timer deleted the hotfix/support-bad-webpack-plugins branch May 3, 2020 23:56
@Timer Timer modified the milestones: 9.3.7, 9.4 May 11, 2020
rokinsky pushed a commit to rokinsky/next.js that referenced this pull request Jul 11, 2020
@vercel vercel locked as resolved and limited conversation to collaborators Jan 30, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Upstream Related to using Next.js with a third-party dependency. (e.g., React, UI/icon libraries, etc.).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Experimental React refresh breaks custom scss configuration
2 participants