Документация Запланировать пилот

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

Запросите бесплатный пилот

Запланировать пилот