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

Update node-module-in-edge-runtime.md #41375

Merged
merged 4 commits into from Oct 13, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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)