Skip to content

Latest commit

 

History

History
147 lines (100 loc) · 4.4 KB

README.md

File metadata and controls

147 lines (100 loc) · 4.4 KB

node-fetch-native

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

Why this package?

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

Features:

✅ Prefer to native globals when available (fetch, Blob, File, FormData, Headers, Request, and Response) (See Node.js experimental fetch)

✅ Compact build and less install size with zero dependencies vs

✅ Support both CommonJS (require) and ESM (import) usage

✅ Use native version if imported without node condition using conditional exports with zero bundle overhead

✅ Polyfill support for Node.js

Usage

Install node-fetch-native dependency:

# npm
npm i node-fetch-native

# yarn
yarn add node-fetch-native

# pnpm
pnpm i node-fetch-native

You can now either import or require the dependency:

// ESM
import fetch from 'node-fetch-native'

// CommonJS
const fetch = require('node-fetch-native')

More named exports:

// ESM
import { fetch, Blob, FormData, Headers, Request, Response } from 'node-fetch-native'

// CommonJS
const { fetch, Blob, FormData, Headers, Request, Response } = require('node-fetch-native')

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 'node-fetch-native/polyfill'

// CJS
require('node-fetch-native/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 node-fetch-native and won't conflict between node-fetch@2 and node-fetch@3.

npm

Using npm overrides:

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

yarn

Using yarn selective dependency resolutions:

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

pnpm

Using pnpm.overrides:

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

License

Made with 💛

node-fetch is published under the MIT license