unenv
将 JavaScript 代码转换为运行时无关
unenv
是一个与框架无关的系统,可以将 JavaScript 代码转换为平台无关的代码,使其能够在任何环境(包括浏览器、Worker、Node.js 或 JavaScript 运行时)中运行。
安装
# Using npm
npm i -D unenv
# Using yarn
yarn add --dev unenv
# Using pnpm
pnpm add -D unenv
用法
使用 env
工具和内置预设,unenv
将提供一个抽象配置,可用于构建管道(rollup.js、webpack 等)。
import { env } from "unenv";
const { alias, inject, polyfill, external } = env({}, {}, {});
注意: 您可以提供任意数量的预设。unenv 将在内部合并它们,最右侧的预设具有更高的优先级。
预设
node
适用于将通用库转换为可在 Node.js 中运行。
- 添加对全局
fetch
API 的支持 - 将 Node.js 内置模块设置为外部模块
import { env, nodeless } from "unenv";
const envConfig = env(node, {});
nodeless
适用于将为 Node.js 创建的库转换为在其他 JavaScript 运行时中运行。
import { env, nodeless } from "unenv";
const envConfig = env(nodeless, {});
deno
此预设可用于扩展 nodeless
,以使用 Deno 的 Node.js API 兼容性(文档,文档)。
import { env, nodeless, deno } from "unenv";
const envConfig = env(nodeless, deno, {});
cloudflare
此预设可用于扩展 nodeless
,以使用 Cloudflare Worker Node.js API 兼容性(文档)。
nodejs_compat
兼容性标志。import { env, nodeless, cloudflare } from "unenv";
const envConfig = env(nodeless, cloudflare, {});
vercel
此预设可用于扩展 nodeless
,以使用 Vercel Edge Node.js API 兼容性(文档)。
import { env, nodeless, vercel } from "unenv";
const envConfig = env(nodeless, vercel, {});
内置 Node.js 模块
unenv
为所有 Node.js 内置模块提供了替代方案,以实现跨平台兼容性。
npm 包
unenv
为常见的 npm 包提供了替代方案,以实现跨平台兼容性。
自动模拟代理
import MockProxy from "unenv/runtime/mock/proxy";
console.log(MockProxy().foo.bar()[0]);
上述包在 Node.js 之外无法工作,我们也不需要任何特定于平台的逻辑!当将 os
别名为 mock/proxy-cjs
时,它将使用 Proxy 对象进行自动模拟,该对象可以像 Object
一样递归遍历,像 Function
一样调用,像 Array
一样迭代,或像 Class
一样实例化。
我们使用此代理来自动模拟未实现的内部模块。想象一个包这样做:
const os = require("os");
if (os.platform() === "windows") {
/* do some fix */
}
module.exports = () => "Hello world";
通过将 os
别名为 unenv/runtime/mock/proxy-cjs
,代码将兼容其他平台。
其他垫片
要了解其他垫片,请查看 https://raw.githubusercontent.com/unjs/unenv/main/src/runtime。
许可
MIT