INTEGRITY Документация

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 высокоточный таймер недоступен, он предоставляет неточный таймер только для совместимости.