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

Don't polyfill process on Middleware #36413

Closed

Conversation

Schniz
Copy link
Contributor

@Schniz Schniz commented Apr 24, 2022

since Middleware run with a different runtime, the polyfills work like their browser counterparts,
which make no sense in a server-side environment and only get in the way.

This commit introduces a warning when using anything from process other than process.env,
and returning undefined so users won't use the polyfilled process

@ijjk
Copy link
Member

ijjk commented Apr 24, 2022

Failing test suites

Commit: c21d51e

yarn testheadless test/development/using-node.js-runtime-apis-in-middleware-emits-a-warning/index.test.ts

  • Using Node.js runtime APIs in Middleware has descriptive error messages > prints a warning for each incompatible API
Expand output

● Using Node.js runtime APIs in Middleware has descriptive error messages › prints a warning for each incompatible API

expect(received).toContain(expected) // indexOf

Expected substring: "You're using a Node.js API (process.cwd) which is not supported in the Edge Runtime that Middleware uses.
Learn more: nextjs.org/docs/api-reference/edge-runtime"
Received string:    "You're using a Node.js API (process.cwd) which is not supported in the Edge Runtime that Middleware uses.
  Learn more: nextjs.org/docs/api-reference/edge-runtime \"./pages/_middleware\"
warn  - NodejsRuntimeApiInMiddlewareWarning: You're using a Node.js API (process.cwd) which is not supported in the Edge Runtime that Middleware uses.
  Learn more: nextjs.org/docs/api-reference/edge-runtime \"./pages/_middleware\"
error - (middleware)/pages/_middleware.js (9:37) @ Object.middleware [as handler]
TypeError: process.cwd is not a function
   7 |             return NextResponse.json({
   8 |               'process.env.NODE_JS_RUNTIME_API_TESTS': process.env.NODE_JS_RUNTIME_API_TESTS,
>  9 |               'process.cwd': process.cwd(),
     |                                     ^
  10 |             });
  11 |           } 
  12 |         
wait  - compiling /_error (client and server)...
wait  - compiling...
event - compiled client and server successfully in 116 ms (160 modules)
"

  40 |     )
  41 |     const logs = getLogsForTag('warning-test', next)
> 42 |     expect(logs).toContain(
     |                  ^
  43 |       `
  44 | You're using a Node.js API (process.cwd) which is not supported in the Edge Runtime that Middleware uses.
  45 | Learn more: nextjs.org/docs/api-reference/edge-runtime

  at Object.<anonymous> (development/using-node.js-runtime-apis-in-middleware-emits-a-warning/index.test.ts:42:18)

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

yarn testheadless test/integration/async-modules/test/index.test.js

  • Async modules > production mode > can render async AMP pages
Expand output

● Async modules › production mode › can render async AMP pages

TIMED OUT: just now

12 seconds ago

  498 |
  499 |   if (hardError) {
> 500 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  501 |   }
  502 |   return false
  503 | }

  at Object.check (lib/next-test-utils.js:500:11)
  at Object.<anonymous> (integration/async-modules/test/index.test.js:85:7)

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

@ijjk
Copy link
Member

ijjk commented Apr 24, 2022

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
buildDuration 22.9s 23.1s ⚠️ +250ms
buildDurationCached 8.8s 8.6s -182ms
nodeModulesSize 481 MB 481 MB ⚠️ +4.32 kB
Page Load Tests Overall increase ✓
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
/ failed reqs 0 0
/ total time (seconds) 5.139 5.113 -0.03
/ avg req/sec 486.52 488.9 +2.38
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 2.583 2.559 -0.02
/error-in-render avg req/sec 967.87 976.99 +9.12
Client Bundles (main, webpack)
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 28.6 kB 28.6 kB
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 72.3 kB 72.3 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 309 B 309 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 3.04 kB 3.04 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.73 kB 5.73 kB
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.36 kB 2.36 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 392 B 392 B
withRouter-HASH.js gzip 319 B 319 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16 kB 16 kB
Client Build Manifests
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
_buildManifest.js gzip 461 B 461 B
Overall change 461 B 461 B
Rendered Page Sizes
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
index.html gzip 531 B 531 B
link.html gzip 544 B 544 B
withRouter.html gzip 525 B 525 B
Overall change 1.6 kB 1.6 kB

Default Build with SWC (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
buildDuration 27.2s 25.7s -1.5s
buildDurationCached 8.6s 8.6s ⚠️ +73ms
nodeModulesSize 481 MB 481 MB ⚠️ +4.32 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
/ failed reqs 0 0
/ total time (seconds) 5.31 5.07 -0.24
/ avg req/sec 470.81 493.14 +22.33
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 2.318 2.521 ⚠️ +0.2
/error-in-render avg req/sec 1078.67 991.86 ⚠️ -86.81
Client Bundles (main, webpack)
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.2 kB 42.2 kB
main-HASH.js gzip 29.1 kB 29.1 kB
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 72.9 kB 72.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
_app-HASH.js gzip 1.35 kB 1.35 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 313 B 313 B
css-HASH.js gzip 325 B 325 B
dynamic-HASH.js gzip 3.02 kB 3.02 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.78 kB 5.78 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.44 kB 2.44 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 393 B 393 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16.1 kB 16.1 kB
Client Build Manifests
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
_buildManifest.js gzip 457 B 457 B
Overall change 457 B 457 B
Rendered Page Sizes
vercel/next.js canary Schniz/next.js warn-for-nodejs-runtime-apis-in-middleware Change
index.html gzip 531 B 531 B
link.html gzip 544 B 544 B
withRouter.html gzip 526 B 526 B
Overall change 1.6 kB 1.6 kB
Commit: faab183

@Schniz Schniz force-pushed the warn-for-nodejs-runtime-apis-in-middleware branch 2 times, most recently from 730c8eb to c7a4c4a Compare April 25, 2022 10:01
since it is running on another runtime, the polyfills work like their browser counterparts,
which make no sense in a server-side environment and only get in the way.

This commit introduces a warning when using anything from `process` other than `process.env`,
and returning `undefined` so users won't use the polyfilled `process`

for some reason RSC is using process.cwd(), so we allow to override the
  `process` entries.
@Schniz Schniz force-pushed the warn-for-nodejs-runtime-apis-in-middleware branch from 5761838 to c1d8e69 Compare April 25, 2022 12:40
@Schniz Schniz marked this pull request as ready for review April 25, 2022 13:34
@@ -0,0 +1,54 @@
import { nextBuild } from 'next-test-utils'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add in-edge to filename

@Schniz
Copy link
Contributor Author

Schniz commented May 18, 2022

superseded by #36980

@Schniz Schniz closed this May 18, 2022
@Schniz Schniz deleted the warn-for-nodejs-runtime-apis-in-middleware branch May 18, 2022 10:00
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 17, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants