← Cloudflare Workers / workers / runtime-apis / nodejs
process
process ↗ модуль в Node.js предоставляет ряд полезных API, связанных с текущим процессом.
Изначально Workers поддерживали только nextTick, env, exit, getBuiltinModule, platform и features в процессе,
который затем был обновлён с помощью enable_nodejs_process_v2 флаг, чтобы включить большинство функций process из Node.js.
См. документация Node.js для process ↗, где это описано подробнее.
При адаптации поддержки Node.js process для бессерверной среды применяются особенности реализации, специфичные для Workers, которые подробнее описаны ниже.
process.env
В реализации Node.js для process.env, env объект представляет собой копию переменных окружения на момент запуска процесса. В реализации Workers окружения на уровне процесса не существует, поэтому по умолчанию env представляет собой пустой объект. Тем не менее вы можете задавать и получать значения из env, и они будут глобально сохраняться для всех Workers, работающих в одном изоляте и контексте (например, в одной и той же точке входа Workers).
Когда Совместимость с Node.js включен и nodejs_compat_populate_process_env флаг совместимости установлен (включён по умолчанию при дате совместимости 2025-04-01 или позже), process.env будет содержать любые переменные окружения,
секреты, или метаданные версии метаданные, настроенные для вашего Worker.
Настройка любого значения для process.env приведёт это значение к строке.
Альтернатива: импорт env от cloudflare:workers
Вместо использования process.env, вы можете import env от cloudflare:workers для доступа к переменным окружения и всем остальным bindings из любого места в коде.
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;
}
})();
},
};Настоятельно рекомендуется не полностью заменить process.env объект с
cloudflare env объект. Это приведёт к потере всех переменных окружения, заданных
ранее, и вызовет непредсказуемое поведение других Workers, выполняющихся в
том же изоляте. В частности, это приведёт к рассогласованности с 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!process.nextTick()
Реализация Workers для process.nextTick() представляет собой обёртку для стандартного Web Platform API queueMicrotask() ↗.
import { env, nextTick } from "node:process";
env["FOO"] = "bar";
console.log(env["FOO"]); // Prints: bar
nextTick(() => {
console.log("next tick");
});Stdio
process.stdout ↗, process.stderr ↗ и process.stdin ↗ поддерживаются в виде потоков. stdin обрабатывается как пустой поток чтения.
stdout и stderr это не TTY потоки для записи, которые выводят данные в обычный лог только при stdout: и stderr: добавления префикса.
Буфер строк работает так: он сохраняет данные, записываемые в stdout или stderr, пока не встретится символ новой строки \n не встретится, либо пока не наступит следующая микрозадача, после которой лог будет выведен.
Это обеспечивает совместимость с инспектором и выводом структурированных логов.
Текущий рабочий каталог
process.cwd() ↗ это текущий рабочий каталог, используется как путь по умолчанию для всех файловых операций и по умолчанию инициализируется значением /bundle.
process.chdir() ↗ позволяет изменять cwd и учитывается операциями файловой системы при использовании enable_nodejs_fs_module.
Hrtime
Хотя process.hrtime ↗ высокоточный таймер недоступен, он предоставляет неточный таймер только для совместимости.