Skip to content

Commit

Permalink
Update node-module-in-edge-runtime.md (#41375)
Browse files Browse the repository at this point in the history
To be a bit more clear.

Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com>
  • Loading branch information
leerob and ijjk committed Oct 13, 2022
1 parent 830750a commit a315c74
Showing 1 changed file with 7 additions and 28 deletions.
35 changes: 7 additions & 28 deletions errors/node-module-in-edge-runtime.md
@@ -1,39 +1,18 @@
# Using Node.js module in Edge runtime
# Using Node.js Modules in Edge Runtime

#### Why This Error Occurred

The code in your [Middleware][middleware] or your [Edge API routes][routes] is using a feature from Node.js runtime.
The code in your [Middleware](https://nextjs.org/docs/advanced-features/middleware) or your [Edge API Routes](https://nextjs.org/docs/api-routes/edge-api-routes) is using a feature from Node.js runtime.

However, the Edge Runtime does not support [Node.js APIs and globals][node-primitives].
However, the Edge Runtime does not support [Node.js APIs and globals](https://nextjs.org/docs/api-reference/edge-runtime#unsupported-apis).

#### Possible Ways to Fix It

When it runs in dev mode, your application will show in the console, and in your browser, which file is importing and using an unsupported module.
This module must be avoided: either by not importing it, or by replacing it with a polyfill.
When running Next.js locally with `next dev`, your application will show in the console, and in your browser, which file is importing and using an unsupported module. This module must be avoided: either by not importing it, or by replacing it with a polyfill.

Please note your code can import Node.js modules **as long as they are not used**.
The following example builds and works at runtime:

```ts
import { NextResponse } from 'next/server'
import { spawn } from 'child_process'

export default async function middleware() {
if (process.version) {
spawn('ls', ['-lh'])
}
return NextResponse.next()
}
```

Dynamic imports in unreachable code path is also supported.
For example, you might replace the Node.js `crypto` module with the [Web Crypto API](<[https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API](https://nextjs.org/docs/api-reference/edge-runtime#web-crypto-apis)>).

### Useful Links

- [Edge runtime supported APIs and primitives][edge-primitives]
- [Next.js Middleware][middleware]

[middleware]: https://nextjs.org/docs/advanced-features/middleware
[routes]: https://nextjs.org/docs/api-routes/edge-api-routes
[node-primitives]: https://nodejs.org/api/index.html
[edge-primitives]: https://edge-runtime.vercel.app/features/available-apis
- [Edge Runtime Supported APIs](https://nextjs.org/docs/api-reference/edge-runtime)
- [Next.js Middleware](https://nextjs.org/docs/advanced-features/middleware)

0 comments on commit a315c74

Please sign in to comment.