🕊️ unenv
[!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>
andnode:<id>
. - Add
inject
entries for Node.js globalsglobal
,Buffer
, andprocess
.
- Add
npmShims
: (default:false
)- Add
alias
entries to replace npm packages likenode-fetch
with lighter shims.
- Add
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).
- ✅ node:assert
- ✅ node:assert/strict
- ✅ node:async_hooks
- ✅ node:buffer
- ✅ node:child_process
- ✅ node:cluster
- ✅ node:console
- ✅ node:constants
- ✅ node:crypto
- ✅ node:dgram
- ✅ node:diagnostics_channel
- ✅ node:dns
- ✅ node:dns/promises
- ✅ node:domain
- ✅ node:events
- ✅ node:fs
- ✅ node:fs/promises
- ✅ node:http
- ✅ node:http2
- ✅ node:https
- ✅ node:inspector
- ✅ node:inspector/promises
- ✅ node:module
- ✅ node:net
- ✅ node:os
- ✅ node:path
- ✅ node:path/posix
- ✅ node:path/win32
- ✅ node:perf_hooks
- ✅ node:process
- ✅ node:punycode
- ✅ node:querystring
- ✅ node:readline
- ✅ node:readline/promises
- ✅ node:repl
- ✅ node:stream
- ✅ node:stream/consumers
- ✅ node:stream/promises
- ✅ node:stream/web
- ✅ node:string_decoder
- ✅ node:sys
- ✅ node:timers
- ✅ node:timers/promises
- ✅ node:tls
- ✅ node:trace_events
- ✅ node:tty
- ✅ node:url
- ✅ node:util
- ✅ node:util/types
- ✅ node:v8
- ✅ node:vm
- ✅ node:wasi
- ✅ node:worker_threads
- ✅ node:zlib
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 */
});
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