fetch-for-all
TypeScript icon, indicating that this package has built-in type declarations

0.0.3ย โ€ขย Publicย โ€ขย Published

cover npm version npm downloads JSDocs License

A redistribution of node-fetch v3 for better backward and forward compatibility.

๐ŸŒŸ Why this package? ๐ŸŒŸ

  • We can no longer require('node-fetch') with the latest version ๐Ÿ˜ข. This stopped popular libraries from upgrading and caused dependency conflicts between node-fetch@2 and node-fetch@3.
  • With upcoming versions of Node.js, native fetch is being supported ๐Ÿš€. We're prepared for native fetch support using this package, yet we'll keep supporting older Node versions.

Features: ๐ŸŽ‰

๐ŸŒ Prefers native globals when available (See Node.js experimental fetch).

๐Ÿ“ฆ Compact build and smaller install size with zero dependencies [![][packagephobia-s-src]][packagephobia-s-href] vs [![][packagephobia-s-alt-src]][packagephobia-s-alt-href]

๐Ÿ”— Supports both CommonJS (require) and ESM (import) usage

๐Ÿšง Uses native version if imported without node condition using conditional exports with zero bundle overhead

๐Ÿ”„ Polyfill support for Node.js

Usage

Install fetch-for-all dependency:

# nyxi
pnpm i fetch-for-all

# pnpm
pnpm add fetch-for-all

# npm
npm i yarn add fetch-for-all

# yarn
yarn add fetch-for-all

You can now either import or require the dependency:

// ESM
import fetch from 'fetch-for-all'

// CommonJS
const fetch = require('fetch-for-all')

More named exports:

// ESM
import { fetch, Blob, FormData, Headers, Request, Response, AbortController } from 'fetch-for-all'

// CommonJS
const { fetch, Blob, FormData, Headers, Request, Response, AbortController } = require('fetch-for-all')

Force using non-native version

Sometimes you want to explicitly use none native (node-fetch) implementation of fetch in case of issues with native/polyfill version of globalThis.fetch with Node.js or runtime environment.

You have two ways to do this:

  • Set FORCE_NODE_FETCH environment variable before starting application.
  • Import from fetch-for-all/node

Polyfill support

Using the polyfill method, we can once ensure global fetch is available in the environment and all files. Natives are always preferred.

Note: I don't recommand this if you are authoring a library! Please prefer explicit methods.

// ESM
import 'fetch-for-all/polyfill'

// CJS
require('fetch-for-all/polyfill')

// You can now use fetch() without any import!

Alias to node-fetch

Using this method, you can ensure all project dependencies and usages of node-fetch can benefit from improved fetch-for-all and won't conflict between node-fetch@2 and node-fetch@3.

npm

Using npm overrides:

// package.json
{
  "overrides": {
    "node-fetch": "npm:fetch-for-all@latest"
  }
}

yarn

Using yarn selective dependency resolutions:

// package.json
{
  "resolutions": {
    "node-fetch": "npm:fetch-for-all@latest"
  }
}

pnpm

Using pnpm.overrides:

// package.json
{
  "pnpm": {
    "overrides": {
      "node-fetch": "npm:fetch-for-all@latest"
    }
  }
}

License

Made with ๐Ÿ’ž

fetch-for-all is published under the MIT LICENSE

Readme

Keywords

none

Package Sidebar

Install

npm i fetch-for-all

Weekly Downloads

11

Version

0.0.3

License

MIT

Unpacked Size

633 kB

Total Files

21

Last publish

Collaborators

  • dennisollhoff