Node.js 中的 process ↗ 模块提供多个与当前进程相关的有用 API。
最初 Workers 仅在 process 上支持 nextTick、env、exit、getBuiltinModule、platform 和 features,随后通过 enable_nodejs_process_v2 标志更新,包含大多数 Node.js process 功能。
更多信息请参阅 Node.js process 文档 ↗。
在为无服务器环境适配 Node.js process 支持时,Workers 特定的实现细节适用,详见下文。
在 Node.js 的 process.env 实现中,env 对象是进程启动时环境变量的副本。在 Workers 实现中,没有进程级环境,因此默认 env 为空对象。你仍可在 env 上设置和获取值,这些值对同一 isolate 和上下文(例如同一 Workers 入口点)中运行的所有 Worker 全局持久。
启用 Node.js 兼容性 并设置 nodejs_compat_populate_process_env 兼容性标志(兼容性日期为 2025-04-01 或更晚时默认启用)时,process.env 将包含在 Worker 上配置的任何环境变量、密钥或版本元数据。
在 process.env 上设置任何值都会将该值强制转换为字符串。
不使用 process.env,你可以从 cloudflare:workers 导入 env,在代码任意位置访问环境变量和所有其他绑定(binding)。
import * as process from "node:process";
export default {
fetch(req, env) {
// Set process.env.FOO to the value of env.FOO if process.env.FOO is not already set
// and env.FOO is a string.
process.env.FOO ??= (() => {
if (typeof env.FOO === "string") {
return env.FOO;
}
})();
},
};强烈建议不要用 cloudflare 的 env 对象替换整个 process.env 对象。这样做会导致丢失之前设置的环境变量,并导致同一 isolate 中运行的其他 Worker 出现意外行为。具体而言,通过命名导入访问时会导致 process.env 对象不一致。
import * as process from "node:process";
import { env } from "node:process";
process.env === env; // true! they are the same object
process.env = {}; // replace the object! Do not do this!
process.env === env; // false! they are no longer the same object
// From this point forward, any changes to process.env will not be reflected in env,
// and vice versa!Workers 的 process.nextTick() 实现是标准 Web 平台 API queueMicrotask() ↗ 的封装。
import { env, nextTick } from "node:process";
env["FOO"] = "bar";
console.log(env["FOO"]); // Prints: bar
nextTick(() => {
console.log("next tick");
});process.stdout ↗、process.stderr ↗ 和 process.stdin ↗ 作为流受支持。stdin 被视为空的可读流。stdout 和 stderr 是非 TTY 可写流,仅输出到普通日志,分别以 stdout: 和 stderr: 为前缀。
行缓冲通过将写入 stdout 或 stderr 的内容存储起来,直到遇到换行符 \n 或直到下一个 microtask,然后将日志刷新到输出。
这确保了与 inspector 和结构化日志输出的兼容性。
process.cwd() ↗ 是_当前工作目录_,用作所有文件系统操作的默认路径,初始化为 /bundle。
process.chdir() ↗ 允许修改 cwd,使用 enable_nodejs_fs_module 时 FS 操作会尊重此设置。
虽然 process.hrtime ↗ 高精度计时器可用,但它仅为兼容性提供不精确的计时。