Package Exports
- unenv
- unenv/_internal/types
- unenv/_internal/utils
- unenv/mock/empty
- unenv/mock/noop
- unenv/mock/proxy
- unenv/mock/proxy-cjs
- unenv/node/assert
- unenv/node/assert/strict
- unenv/node/async_hooks
- unenv/node/buffer
- unenv/node/child_process
- unenv/node/cluster
- unenv/node/console
- unenv/node/constants
- unenv/node/crypto
- unenv/node/dgram
- unenv/node/diagnostics_channel
- unenv/node/dns
- unenv/node/dns/promises
- unenv/node/domain
- unenv/node/events
- unenv/node/fs
- unenv/node/fs/promises
- unenv/node/http
- unenv/node/http2
- unenv/node/https
- unenv/node/inspector
- unenv/node/inspector/promises
- unenv/node/internal/async_hooks/async-hook
- unenv/node/internal/async_hooks/async-local-storage
- unenv/node/internal/async_hooks/async-resource
- unenv/node/internal/buffer/base64
- unenv/node/internal/buffer/buffer
- unenv/node/internal/buffer/file
- unenv/node/internal/buffer/ieee754
- unenv/node/internal/crypto/constants
- unenv/node/internal/crypto/node
- unenv/node/internal/crypto/web
- unenv/node/internal/dgram/socket
- unenv/node/internal/diagnostics_channel/channel
- unenv/node/internal/diagnostics_channel/tracing-channel
- unenv/node/internal/dns/constants
- unenv/node/internal/domain/domain
- unenv/node/internal/events/events
- unenv/node/internal/fs/classes
- unenv/node/internal/fs/constants
- unenv/node/internal/fs/fs
- unenv/node/internal/fs/promises
- unenv/node/internal/http/agent
- unenv/node/internal/http/constants
- unenv/node/internal/http/request
- unenv/node/internal/http/response
- unenv/node/internal/http2/constants
- unenv/node/internal/net/server
- unenv/node/internal/net/socket
- unenv/node/internal/os/constants
- unenv/node/internal/perf_hooks/constants
- unenv/node/internal/perf_hooks/histogram
- unenv/node/internal/perf_hooks/performance
- unenv/node/internal/process/env
- unenv/node/internal/process/hrtime
- unenv/node/internal/process/nexttick
- unenv/node/internal/process/node-version
- unenv/node/internal/process/process
- unenv/node/internal/punycode/punycode
- unenv/node/internal/querystring/querystring
- unenv/node/internal/readline/interface
- unenv/node/internal/readline/promises/interface
- unenv/node/internal/readline/promises/readline
- unenv/node/internal/stream/duplex
- unenv/node/internal/stream/readable
- unenv/node/internal/stream/transform
- unenv/node/internal/stream/writable
- unenv/node/internal/timers/immediate
- unenv/node/internal/timers/scheduler
- unenv/node/internal/timers/set-immediate
- unenv/node/internal/timers/set-interval
- unenv/node/internal/timers/set-timeout
- unenv/node/internal/timers/timeout
- unenv/node/internal/tls/constants
- unenv/node/internal/tls/secure-context
- unenv/node/internal/tls/server
- unenv/node/internal/tls/tls-socket
- unenv/node/internal/trace_events/tracing
- unenv/node/internal/tty/read-stream
- unenv/node/internal/tty/write-stream
- unenv/node/internal/url/constants
- unenv/node/internal/url/errors
- unenv/node/internal/url/url
- unenv/node/internal/url/util
- unenv/node/internal/util/inherits
- unenv/node/internal/util/legacy-types
- unenv/node/internal/util/log
- unenv/node/internal/util/mime
- unenv/node/internal/util/promisify
- unenv/node/internal/util/types
- unenv/node/internal/v8/deserializer
- unenv/node/internal/v8/profiler
- unenv/node/internal/v8/serializer
- unenv/node/internal/vm/constants
- unenv/node/internal/vm/script
- unenv/node/internal/worker_threads/broadcast-channel
- unenv/node/internal/worker_threads/message-channel
- unenv/node/internal/worker_threads/message-port
- unenv/node/internal/worker_threads/worker
- unenv/node/internal/zlib/codes
- unenv/node/internal/zlib/constants
- unenv/node/internal/zlib/formats/_shared
- unenv/node/internal/zlib/formats/brotli
- unenv/node/internal/zlib/formats/deflate
- unenv/node/internal/zlib/formats/gzip
- unenv/node/internal/zlib/formats/zip
- unenv/node/module
- unenv/node/net
- unenv/node/os
- unenv/node/path
- unenv/node/path/posix
- unenv/node/path/win32
- unenv/node/perf_hooks
- unenv/node/process
- unenv/node/punycode
- unenv/node/querystring
- unenv/node/readline
- unenv/node/readline/promises
- unenv/node/repl
- unenv/node/sqlite
- unenv/node/stream
- unenv/node/stream/consumers
- unenv/node/stream/promises
- unenv/node/stream/web
- unenv/node/string_decoder
- unenv/node/sys
- unenv/node/timers
- unenv/node/timers/promises
- unenv/node/tls
- unenv/node/trace_events
- unenv/node/tty
- unenv/node/url
- unenv/node/util
- unenv/node/util/types
- unenv/node/v8
- unenv/node/vm
- unenv/node/wasi
- unenv/node/worker_threads
- unenv/node/zlib
- unenv/npm/cross-fetch
- unenv/npm/debug
- unenv/npm/fsevents
- unenv/npm/inherits
- unenv/npm/node-fetch
- unenv/npm/whatwg-url
- unenv/package.json
- unenv/polyfill/buffer
- unenv/polyfill/globalthis
- unenv/polyfill/globalthis-global
- unenv/polyfill/performance
- unenv/polyfill/process
- unenv/polyfill/timers
- unenv/web/performance/_polyfills
- unenv/web/performance/index
Readme
🕊️ 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