fix(@astrojs/cloudflare): support for nodejs_compat (#8595)
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev>
This commit is contained in:
parent
9b84a7ef96
commit
5b0b3c9a8e
3 changed files with 71 additions and 0 deletions
20
.changeset/fifty-weeks-bake.md
Normal file
20
.changeset/fifty-weeks-bake.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
'@astrojs/cloudflare': minor
|
||||
---
|
||||
|
||||
Add support for the following Node.js Runtime APIs, which are availabe in [Cloudflare](https://developers.cloudflare.com/workers/runtime-apis/nodejs) using the `node:` syntax.
|
||||
|
||||
- assert
|
||||
- AsyncLocalStorage
|
||||
- Buffer
|
||||
- Diagnostics Channel
|
||||
- EventEmitter
|
||||
- path
|
||||
- process
|
||||
- Streams
|
||||
- StringDecoder
|
||||
- util
|
||||
|
||||
```js
|
||||
import { Buffer } from 'node:buffer';
|
||||
```
|
|
@ -202,6 +202,33 @@ This will enable Cloudflare to serve files and process static redirects without
|
|||
|
||||
See [Cloudflare's documentation](https://developers.cloudflare.com/pages/platform/functions/routing/#create-a-_routesjson-file) for more details.
|
||||
|
||||
## Node.js compatibility
|
||||
|
||||
Astro's Cloudflare adapter allows you to use any Node.js runtime API supported by Cloudflare:
|
||||
|
||||
- assert
|
||||
- AsyncLocalStorage
|
||||
- Buffer
|
||||
- Diagnostics Channel
|
||||
- EventEmitter
|
||||
- path
|
||||
- process
|
||||
- Streams
|
||||
- StringDecoder
|
||||
- util
|
||||
|
||||
To use these APIs, your page or endpoint must be server-side rendered (not pre-rendered) and must use the the `import {} from 'node:*'` import syntax.
|
||||
|
||||
```js
|
||||
// pages/api/endpoint.js
|
||||
export const prerender = false;
|
||||
import { Buffer } from 'node:buffer';
|
||||
```
|
||||
|
||||
Additionally, you'll need to enable the Compatibility Flag in Cloudflare. The configuration for this flag may vary based on where you deploy your Astro site.
|
||||
|
||||
For detailed guidance, please refer to the [Cloudflare documentation](https://developers.cloudflare.com/workers/runtime-apis/nodejs).
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
For help, check out the `#support` channel on [Discord](https://astro.build/chat). Our friendly Support Squad members are here to help!
|
||||
|
|
|
@ -296,6 +296,18 @@ export default function createIntegration(args?: Options): AstroIntegration {
|
|||
target: 'es2020',
|
||||
platform: 'browser',
|
||||
conditions: ['workerd', 'worker', 'browser'],
|
||||
external: [
|
||||
'node:assert',
|
||||
'node:async_hooks',
|
||||
'node:buffer',
|
||||
'node:diagnostics_channel',
|
||||
'node:events',
|
||||
'node:path',
|
||||
'node:process',
|
||||
'node:stream',
|
||||
'node:string_decoder',
|
||||
'node:util',
|
||||
],
|
||||
entryPoints: entryPaths,
|
||||
outdir: outputDir,
|
||||
allowOverwrite: true,
|
||||
|
@ -357,6 +369,18 @@ export default function createIntegration(args?: Options): AstroIntegration {
|
|||
target: 'es2020',
|
||||
platform: 'browser',
|
||||
conditions: ['workerd', 'worker', 'browser'],
|
||||
external: [
|
||||
'node:assert',
|
||||
'node:async_hooks',
|
||||
'node:buffer',
|
||||
'node:diagnostics_channel',
|
||||
'node:events',
|
||||
'node:path',
|
||||
'node:process',
|
||||
'node:stream',
|
||||
'node:string_decoder',
|
||||
'node:util',
|
||||
],
|
||||
entryPoints: [entryPath],
|
||||
outfile: buildPath,
|
||||
allowOverwrite: true,
|
||||
|
|
Loading…
Reference in a new issue