ποΈ Node.js compatibility for any JavaScript runtime, including browsers and edge workers.
[!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.
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 |
nodeCompat: (default: true)
alias entries for Node.js builtins as <id> and node:<id>.inject entries for Node.js globals global, Buffer, and process.npmShims: (default: false)
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/ polyfillsYou 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 |
unenv replaces Node.js built-in modules compatible with any runtime (view source).
// 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 */
});
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"
}
}
Published under the MIT license.
Made by @pi0 and community π
π€ auto updated with automd