es-tooling / ecosystem-cleanup

A place to keep track of ongoing efforts to clean up the JS ecosystem
393 stars 2 forks source link

replace axios with a fetch based api reimplementation #63

Open dominikg opened 4 months ago

dominikg commented 4 months ago

redaxios https://github.com/developit/redaxios is pretty well known but not that active

https://github.com/developit/redaxios/issues/97 mentions https://github.com/divyam234/feaxios which has recent activity also seems to implement more features.

Would save 2MB install size and 80% bundle size (10kb -> 2kb)

50M downloads/week with 140k dependents: https://www.npmjs.com/package/axios

dominikg commented 4 months ago

This is a critical package/dependency too as it handles request/response, so could have access to all data of applications. Trust/track-record for the maintainer/org of the replacement package should be taken into account as well.

43081j commented 4 months ago

i feel like most usages of axois could just use fetch

i'd be interested in the use cases where fetch isn't quite enough, if we can find some examples

also agreed we should take care to find a trusted, well maintained alternative

dominikg commented 4 months ago

axios has a larger api and utilitity functions. a small drop-in replacement is a much easier sell than refactoring large codebases to remove all uses. I do agree that one should look at how axios is used and if it could be replaced by fetch directly without much effort.

suhaotian commented 4 months ago

What you think about this one https://github.com/suhaotian/xior

dominikg commented 4 months ago

it doesn't seem to be 100% api compatible to axios: https://github.com/suhaotian/xior?tab=readme-ov-file#1-is-xior-100-compatiable-with-axios so it would not be usable as a drop-in replacement.

suhaotian commented 4 months ago

Yeah, but the xior core features is drop-in replacement.

even the redaxios and feaxios is not 100% compatiable, and have ESM/commonjs issue.

And they don't support nested object in params, if want support then need to use qs package which is already gzip 10kb.

dominikg commented 4 months ago

In that case it would help if you documented which parts of xior are api compatible to axios so people can recommend it over axios to projects that use only covered parts.

suhaotian commented 4 months ago
fregante commented 4 months ago

Replacing axios is easy, replacing all the tests based on axios is not. I was not able to find a drop-in replacement for axios-mock-adapter and all of the fetch-based mocks are different in substantial ways.

talentlessguy commented 4 months ago

there's https://github.com/sindresorhus/ky

43081j commented 4 months ago

I think we should recommend that people use fetch instead of a third party package. That'll cover most use cases

Would be good to know some cases where fetch isn't enough

talentlessguy commented 4 months ago

I think we should recommend that people use fetch instead of a third party package. That'll cover most use cases

Would be good to know some cases where fetch isn't enough

tracking request progress

Stanzilla commented 3 months ago

i feel like most usages of axois could just use fetch

i'd be interested in the use cases where fetch isn't quite enough, if we can find some examples

also agreed we should take care to find a trusted, well maintained alternative

interceptors come to mind

fry69 commented 1 month ago

For what it's worth: Here is transcript of prompting o1-mini requesting it to write a simple wrapper around fetch() with similar functionality like axios.

Maybe it is useful to gain some insight (it helped me) -> https://gist.github.com/fry69/6bdca157d02491809e577a4093273588