unenv-nightly
v2.0.0-20251124-134829-ab99519
Published
<!-- automd:badges color=yellow packagephobia -->
Downloads
990,991
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
aliasentries for Node.js builtins as<id>andnode:<id>. - Add
injectentries for Node.js globalsglobal,Buffer, andprocess.
- Add
npmShims: (default:false)- Add
aliasentries to replace npm packages likenode-fetchwith 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
