Description
Duplicates
- I have searched the existing issues
Latest version
- I have tested the latest version
Current behavior 😯
When importing and using APIs like import fetch from "node-fetch";
the types, and APIs that are used at runtime WILDLY differ between npm run dev
and npm run build && node .output/server/index.mjs
.
Observed differences:
- using
await fetch(myUrl, { compress: false });
run dev
: the response returned is as expected not decompressed when using.arrayBuffer()
run build
: the response ignores the compress option and decompresses the response of.arrayBuffer()
- prototype of
NodeJS.ReadableStream
(console.log(await fetch(myUrl).body
)run dev
PassThrough { _transform: [Function], .... many more props ..... find: [Function], }
run build
[ReadableStream] { locked: [Getter], cancel: [Function: cancel], getReader: [Function: getReader], pipeThrough: [Function: pipeThrough], pipeTo: [Function: pipeTo], tee: [Function: tee], values: [Function: values] }
In general it seems that at runtime (npm run build
) import fetch from "node-fetch";
the fetch
is replaced with the browser/DOM fetch
API which does not happen at npm run dev
.
Expected behavior 🤔
When importing import fetch from "node-fetch";
the output and behaviour of the API in npm run dev
and npm run build
is completely the same. While implementation might change behind the scene on building behaviour and API contracts shall not be broken.
Steps to reproduce 🕹
Steps:
- go to https://stackblitz.com/edit/github-qd1tfd?file=src%2Froutes%2Findex.ts
- Clone it to your laptop: the reproducer does not work on stackblitz since the app runs seemingly in a web-worker and seems NOT to use "real" node-apis
- run
npm install && npm run dev
goto localhost:3000 see the Content size + body prototype - run
npm run build && node .output/server/index.mjs
repeat and see the difference
Context 🔦
There are features in the node-fetch
fetch not present in the browser / dom fetch
(the compress option).
Your environment 🌎
@solidjs/start: 1.0.9
(see the stackblitz from reproducer)