Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Развёртывание: Node.js, Bun, Deno, Cloudflare Workers

Развёртывание — запуск приложения на сервере, где его видят пользователи. Код маршрутов Hono одинаков на всех платформах, различается только точка входа и команды. Но совместимы не все пакеты: better-sqlite3 и process.env есть не везде.

Node.js

На своём сервере или VPS приложение собирают и запускают обычным Node.js:

npm ci
npm run build
npm start

npm ci ставит пакеты точно по package-lock.json, npm run build компилирует TypeScript в dist/, npm start запускает dist/index.js. Файл .env с настоящими секретами создают прямо на сервере. Чтобы приложение перезапускалось после сбоя и перезагрузки, его запускают через менеджер процессов, например systemd или pm2, а перед ним ставят nginx с HTTPS.

Bun

Bun сам запускает TypeScript и имеет встроенный сервер. Вместо serve() из @hono/node-server точка входа экспортирует приложение:

// src/index.ts
import { Hono } from 'hono'
 
const app = new Hono()
 
app.get('/', (c) => c.text('Привет из Bun'))
 
export default app
bun run src/index.ts

Bun увидит объект с методом fetch и запустит сервер на порту 3000. Вместо better-sqlite3 в Bun обычно используют встроенный модуль bun:sqlite с похожими методами.

Deno

В Deno Hono подключают из реестра JSR, а сервер запускает встроенная функция:

// main.ts
import { Hono } from 'jsr:@hono/hono'
 
const app = new Hono()
 
app.get('/', (c) => c.text('Привет из Deno'))
 
Deno.serve(app.fetch)
deno run --allow-net main.ts

Флаг --allow-net разрешает программе работать с сетью: без явных разрешений Deno не даёт доступа к сети и файлам.

Cloudflare Workers

Workers — платформа, где код выполняется на серверах Cloudflare по всему миру. Проект создают отдельным шаблоном cloudflare-workers, точка входа тоже экспортирует приложение (export default app). Команды:

npm run dev
npm run deploy

Первая запускает локальную копию через инструмент Wrangler, вторая публикует воркер. На Workers нет файловой системы, поэтому SQLite из файла не подойдёт: базу заменяют на D1, а переменные и секреты приходят в c.env.

Что меняется при переезде

Часть кодаNode.jsBunDenoWorkers
запускserve()export default appDeno.serve()export default app
переменныеprocess.envprocess.envDeno.envc.env
SQLitebetter-sqlite3bun:sqliteпакет из JSR или npmD1

Функция env(c) из hono/adapter работает везде, поэтому маршруты, которые используют её, переносятся без изменений.

Частая ошибка

На сервере запускают npm run dev. Эта команда для разработки: она следит за файлами и компилирует TypeScript на лету, тратя память и время. В рабочем режиме собирайте проект через npm run build и запускайте npm start.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.