-
Notifications
You must be signed in to change notification settings - Fork 26.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update node-module-in-edge-runtime.md (#41375)
To be a bit more clear. Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com>
- Loading branch information
Showing
1 changed file
with
7 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |