Skip to content

Latest commit

History

History
156 lines (106 loc) 路 4.49 KB

README.md

File metadata and controls

156 lines (106 loc) 路 4.49 KB

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