Skip to content
/ unenv Public

πŸ•ŠοΈ Node.js compatibility for any JavaScript runtime, including browsers and edge workers.

License

Notifications You must be signed in to change notification settings

unjs/unenv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ•ŠοΈ unenv

npm version npm downloads

Note

You are on the development (v2) branch. Check out v1 for the current release.

unenv provides polyfills to add Node.js compatibility for any JavaScript runtime, including browsers and edge workers.

🌟 Used by

Usage

The defineEnv utility can generate a target environment configuration.

import { defineEnv } from "unenv";

const { env } = defineEnv({
  nodeCompat: true,
  npmShims: true,
  resolve: true,
  overrides: {},
  presets: [],
});

const { alias, inject, external, polyfill } = env;

You can then integrate the env object with your build tool:

Bundler alias inject external
rollup @rollup/plugin-alias @rollup/plugin-inject external
rolldown resolve.alias inject external
vite resolve.alias @rollup/plugin-inject ssr.external
esbuild alias inject external
rspack resolve.alias - externals
webpack resolve.alias webpack-plugin-inject externals

Options

  • nodeCompat: (default: true)
    • Add alias entries for Node.js builtins as <id> and node:<id>.
    • Add inject entries for Node.js globals global, Buffer, and process.
  • npmShims: (default: false)
    • Add alias entries to replace npm packages like node-fetch with lighter shims.
  • resolve: (default: false) Resolve config values to absolute paths.
  • overrides: Additional overrides for env config.
  • presets: Additional presets (for example @cloudflare/unenv-preset).

unenv/ polyfills

You can also directly import unenv/ polyfills:

Polyfills Description Source
unenv/mock/* Mocking utils src/runtime/mock
unenv/node/* APIs compatible with Node.js API src/runtime/node
unenv/npm/* NPM package shims src/runtime/npm
unenv/polyfill/* Global polyfills src/runtime/polyfill
unenv/web/* Subset of Web APIs src/runtime/web

Node.js compatibility

unenv replaces Node.js built-in modules compatible with any runtime (view source).

Manual mocking

// Magic proxy to replace any unknown API
import MockProxy from "unenv/mock/proxy";

// You can also create named mocks
const lib = MockProxy.__createMock__("lib", {
  /* overrides */
});

(view source)

Nightly release channel

You can use the nightly release channel to try the latest changes in the main branch via unenv-nightly.

If directly using unenv in your project:

{
  "devDependencies": {
    "unenv": "npm:unenv-nightly"
  }
}

If using unenv via another tool (Nuxt or Nitro) in your project:

{
  "resolutions": {
    "unenv": "npm:unenv-nightly"
  }
}

License

Published under the MIT license. Made by @pi0 and community πŸ’›


πŸ€– auto updated with automd