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 1 commit
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
28 changes: 7 additions & 21 deletions errors/node-module-in-edge-runtime.md
@@ -1,39 +1,25 @@
# 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][middleware] or your [Edge API Routes][routes] is using a feature from Node.js runtime.

However, the Edge Runtime does not support [Node.js APIs and globals][node-primitives].

#### 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:
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).

```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.
> **Note:** You can import Node.js modules as long as they are not used.
Copy link
Member

Choose a reason for hiding this comment

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

Do we need to clarify why you would want to import something unused?

Copy link
Member Author

Choose a reason for hiding this comment

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

Nope, removed.


### Useful Links

- [Edge runtime supported APIs and primitives][edge-primitives]
- [Edge Runtime Supported APIs][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-primitives]: https://nextjs.org/docs/api-reference/edge-runtime#unsupported-apis
leerob marked this conversation as resolved.
Show resolved Hide resolved