Spec-Zone.ru › Deno 2

deno serve

deno serve запускает файл в качестве HTTP-сервера с помощью Deno.serve(). Файл должен экспортировать объект по умолчанию с обработчиком fetch. Полное руководство по созданию HTTP-серверов см. в разделе Создание HTTP-сервера.

Основные сведения

server.ts
export default {
  fetch(_req: Request) {
    return new Response("Hello world!");
  },
} satisfies Deno.ServeDefaultExport;
›_
deno serve server.ts

По умолчанию сервер прослушивает порт 8000. Чтобы изменить его, используйте --port:

›_
deno serve --port=3000 server.ts

deno serve и deno run

Оба подхода запускают HTTP-сервер. Разница заключается в том, кто вызывает Deno.serve():

  • При использовании deno serve Deno вызывает Deno.serve() за вас. Файл должен лишь экспортировать объект по умолчанию с обработчиком fetch. Deno управляет прослушивателем, что позволяет добавлять такие возможности, как запуск нескольких экземпляров в разных потоках с помощью --parallel.
  • При использовании deno run вы сами вызываете Deno.serve() внутри программы. Это даёт полный контроль над параметрами прослушивания и окружающим кодом. Этот подход подходит, когда сервер — часть более крупной программы.

Используйте deno serve, если программа в первую очередь является HTTP-сервером и вы хотите, чтобы им управляла Deno; используйте deno run с Deno.serve(), если вам нужно контролировать, как и когда запускается сервер.

Структура экспорта по умолчанию

Файл должен экспортировать объект по умолчанию, соответствующий типу Deno.ServeDefaultExport. У объекта есть два свойства:

export interface ServeDefaultExport {
  fetch: ServeHandler;
  onListen?: (localAddr: Deno.Addr) => void;
}

fetch (обязательный)

Обработчик fetch получает стандартный объект Request и объект ServeHandlerInfo с метаданными соединения:

type ServeHandler = (
  request: Request,
  info: ServeHandlerInfo,
) => Response | Promise<Response>;

interface ServeHandlerInfo {
  remoteAddr: Deno.Addr; // remote address of the connection
  completed: Promise<void>; // resolves when the request completes
}

Если обработчик выдаёт ошибку, она затрагивает только этот запрос — сервер продолжает работу.

onListen (необязательный)

Вызывается один раз при запуске прослушивания сервером. Если свойство не указано, в консоль выводится сообщение по умолчанию.

server.ts
export default {
  fetch(request, info) {
    const { hostname, port } = info.remoteAddr as Deno.NetAddr;
    console.log(`${request.method}${request.url} from ${hostname}:${port}`);

    return new Response("Hello, World!", {
      headers: { "content-type": "text/plain" },
    });
  },

  onListen({ hostname, port }) {
    console.log(`Server running at http://${hostname}:${port}/`);
  },
} satisfies Deno.ServeDefaultExport;

Все остальные свойства экспорта по умолчанию игнорируются без уведомления. Если отсутствует fetch, сервер не запускается. Если существуют fetch или onListen, но они не являются функциями, выдаётся ошибка TypeError.

Маршрутизация запросов

Используйте URL запроса для перенаправления к разным обработчикам:

server.ts
export default {
  fetch(request: Request) {
    const url = new URL(request.url);

    if (url.pathname === "/api/health") {
      return Response.json({ status: "ok" });
    }

    return new Response("Not found", { status: 404 });
  },
} satisfies Deno.ServeDefaultExport;

Привязка к имени хоста

По умолчанию deno serve прослушивает 0.0.0.0. Используйте --host, чтобы привязать сервер к определённому интерфейсу:

›_
deno serve --host=127.0.0.1 server.ts

Горизонтальное масштабирование

Запустите несколько экземпляров сервера на разных ядрах процессора, чтобы увеличить пропускную способность:

›_
deno serve --parallel server.ts

Режим наблюдения

Автоматически перезапускайте сервер при изменении файлов:

›_
deno serve --watch server.ts

Разрешения

deno serve автоматически разрешает серверу прослушивать соединения без необходимости указывать --allow-net. Дополнительные разрешения (например, на чтение файлов) нужно предоставлять явно:

›_
deno serve --allow-read server.ts
Использование командной строки:
deno serve [OPTIONS] [SCRIPT_ARG]...

Запуск сервера, определённого в главном модуле

Команда serve использует экспорты по умолчанию главного модуля, чтобы определить, какие серверы запускать.

Запустите сервер, определённый в server.ts:

deno serve server.ts

Запустите сервер, определённый в server.ts, отслеживая изменения и используя порт 5050:

deno serve --watch --port 5050 server.ts

Параметры проверки типов

--check<CHECK_TYPE>необязательно

Включить проверку типов. Эта подкоманда по умолчанию не проверяет типы; передайте --check=all, чтобы также проверять удалённые модули. В качестве альтернативы используйте подкоманду 'deno check'.

--no-check<NO_CHECK_TYPE>необязательно

Пропустить проверку типов. Если указано значение "remote", диагностические ошибки удалённых модулей будут игнорироваться.

Параметры управления зависимостями

--cached-only

Требовать, чтобы удалённые зависимости уже находились в кэше.

--frozen<BOOLEAN>необязательно

Завершить работу с ошибкой, если lock-файл устарел.

--import-map<FILE>

Загрузить файл import map из локального файла или удалённого URL.

--lock<FILE>необязательно

Проверить указанный lock-файл. (Если значение не указано, по умолчанию используется "./deno.lock".)

--no-lock

Отключить автоматический поиск lock-файла.

--no-npm

Не разрешать npm-модули.

--no-remote

Не разрешать удалённые модули.

--node-modules-dir<MODE>необязательно

Выбирает режим каталога node_modules для npm-пакетов (не путь). Возможные значения: auto (создать локальный каталог node_modules и установить в него npm-пакеты), manual (использовать существующий локальный каталог node_modules, не изменяя его), none (не использовать локальный каталог node_modules; разрешать npm-пакеты из глобального кэша). Если флаг передан без значения, по умолчанию используется auto.

--node-modules-linker<MODE>

Задаёт режим компоновщика для npm-пакетов (изолированный или hoisted).

--reload, -r<CACHE_BLOCKLIST>необязательно

Перезагрузить кэш исходного кода (повторно скомпилировать TypeScript). Если значение не указано, перезагружается всё. Передайте список спецификаторов через запятую, чтобы перезагрузить только эти модули; npm: перезагружает все npm-модули; npm:chalk перезагружает один npm-модуль; jsr:@std/http/file-server,jsr:@std/assert/assert-equals перезагружает указанные модули.

--vendor<vendor>необязательно

Включает или отключает использование локального каталога vendor для удалённых модулей и каталога node_modules для npm-пакетов.

Параметры

--allow-scripts<PACKAGE>необязательно

Разрешить запуск скриптов жизненного цикла npm для указанных пакетов. Примечание: скрипты выполняются только при использовании каталога node_modules (--node-modules-dir).

--cert<FILE>

Загрузить центр сертификации из файла в кодировке PEM.

--conditions<conditions>

Используйте этот аргумент, чтобы указать пользовательские условия для экспортов npm-пакетов. Также можно использовать переменную окружения DENO_CONDITIONS. .

--config, -c<FILE>

Настроить различные аспекты Deno, включая TypeScript, линтинг и форматирование кода. Обычно файл конфигурации называется deno.json или deno.jsonc и обнаруживается автоматически; в этом случае указывать этот флаг не нужно.

--cpu-prof

Запустить профилировщик ЦП V8 при запуске и записать профиль на диск при завершении. По умолчанию профили записываются в текущий каталог.

--cpu-prof-dir<DIR>

Каталог для записи профилей ЦП V8. Неявно включает --cpu-prof.

--cpu-prof-flamegraph

Создать SVG-флеймграф вместе с профилем ЦП.

--cpu-prof-interval<MICROSECONDS>

Интервал выборки при профилировании ЦП в микросекундах (по умолчанию: 1000).

--cpu-prof-md

Создать удобный для чтения отчёт в формате Markdown вместе с профилем ЦП.

--cpu-prof-name<NAME>

Имя файла профиля ЦП (по умолчанию: CPU...cpuprofile).

--env-file<FILE>необязательно

Загрузить переменные окружения из локального файла. Используется только первая переменная окружения с заданным ключом. Существующие переменные окружения процесса не перезаписываются: если в окружении уже есть переменные с такими же именами, их значения сохраняются. Если в файле .env несколько объявлений одной переменной окружения, применяется первое найденное. Это зависит от порядка файлов, переданных в аргументах.

--ext<ext>

Задать тип содержимого для указанного файла.

--host<host>

TCP-адрес для обслуживания запросов; по умолчанию 0.0.0.0 (все интерфейсы).

--location<HREF>

Значение globalThis.location, используемое некоторыми веб-API.

--minimum-dependency-age<minimum-dependency-age>

(Нестабильный) Возраст в минутах, длительность в формате ISO-8601 или абсолютная временная метка RFC3339 (например, '120' — два часа, 'P2D' — два дня, '2025-09-16' — дата отсечения, '2025-09-16T12:00:00+00:00' — время отсечения, '0' — отключить).

--no-code-cache

Отключить кэш кода V8.

--no-config

Отключить автоматическую загрузку файла конфигурации.

--open

Открыть в браузере адрес, по которому работает сервер.

--parallel

Запустить несколько рабочих процессов сервера параллельно. По умолчанию количество параллельных процессов равно числу доступных процессоров или значению переменной окружения DENO_JOBS.

--port<port>

TCP-порт для обслуживания запросов. Передайте 0, чтобы выбрать случайный свободный порт [по умолчанию: 8000]

--preload<FILE>

Список файлов, которые будут выполнены до главного модуля.

--require<FILE>

Список модулей CommonJS, которые будут выполнены до главного модуля.

--seed<NUMBER>

Задать начальное значение генератора случайных чисел.

--tunnel, -t<tunnel>необязательно

Выполнять задачи с туннелем к Deno Deploy.

Создать защищённое соединение между локальным компьютером и Deno Deploy, обеспечив доступ к централизованным переменным окружения, ведению журналов и публикации из локальной среды в общедоступном интернете.

--v8-flags<V8_FLAGS>необязательно

Чтобы просмотреть список всех доступных флагов, используйте --v8-flags=--help. Флаги также можно задавать с помощью переменной окружения DENO_V8_FLAGS. Флаги, указанные с этим параметром, добавляются после значений переменной окружения DENO_V8_FLAGS.

Параметры отладки

--inspect<HOST_PORT>необязательно

Активировать инспектор на адресе host:port [по умолчанию: 127.0.0.1:9229]. Имя хоста и порт указывать необязательно. Если указать порт 0, будет назначен случайный свободный порт.

--inspect-brk<HOST_PORT>необязательно

Активировать инспектор на адресе host:port, дождаться подключения отладчика и остановиться в начале пользовательского скрипта.

--inspect-wait<HOST_PORT>необязательно

Активировать инспектор на адресе host:port и дождаться подключения отладчика перед выполнением пользовательского кода.

Параметры наблюдения за файлами

--no-clear-screen

Не очищать экран терминала в режиме наблюдения.

--watch<FILES>необязательно

Отслеживать изменения файлов и автоматически перезапускать процесс. По умолчанию отслеживаются локальные файлы из графа модулей точки входа. Дополнительные пути можно отслеживать, передав их аргументами этому флагу.

--watch-exclude<FILES>необязательно

Исключить указанные файлы и шаблоны из режима наблюдения.

--watch-hmr<FILES>необязательно

Отслеживать изменения файлов и выполнять горячую замену модулей. Если горячая замена не удаётся, процесс перезапускается. По умолчанию отслеживаются локальные файлы из графа модулей точки входа. Дополнительные пути можно отслеживать, передав их аргументами этому флагу.

Последнее обновление: 17 июня 2026 г.

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/serve

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API