Сборка и публикация
Сервер разработки npm run dev удобен, но медленный и не предназначен для посетителей. Перед публикацией приложение собирают: Nuxt сжимает код, раскладывает файлы и готовит сервер Nitro, который запускается одной командой. Где именно будет работать сайт, определяет пресет — набор настроек сборки под конкретный хостинг.
Сборка
npm run buildКоманда выполняет nuxt build и через несколько секунд выводит в терминале размер файлов и подсказку, как запустить результат. Всё собранное лежит в папке .output/:
.output/
├── public/ файлы для браузера: скрипты, стили, картинки
├── server/
│ └── index.mjs сервер Nitro
└── nitro.jsonПапка самодостаточна: node_modules для запуска ей не нужен.
Проверка перед публикацией
npm run previewКоманда запускает собранную версию на http://localhost:3000. Проверьте страницы, формы и вход: так сайт будет работать на сервере.
Запуск на своём сервере
Скопируйте папку .output/ на сервер с Node.js 20 или новее и запустите:
NUXT_ADMIN_PASSWORD=secret123 NUXT_SESSION_PASSWORD=ключ-не-короче-32-символов PORT=3000 node .output/server/index.mjsСервер начнёт принимать запросы на порту из переменной PORT. Файл .env здесь не читается, поэтому все настройки передают переменными окружения. Чтобы сервер перезапускался после сбоя, его обычно запускают через менеджер процессов, например PM2, или в Docker-контейнере.
Пресеты Nitro
По умолчанию сборка готовит сервер для Node.js (пресет node-server). Для облачных платформ нужен другой формат, и его задают пресетом:
// nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: 'netlify'
}
})| Пресет | Куда |
|---|---|
node-server | Свой сервер или VPS с Node.js |
vercel | Vercel |
netlify | Netlify |
cloudflare-pages | Cloudflare Pages |
static | Любой статический хостинг |
На Vercel и Netlify пресет обычно определяется сам: достаточно подключить репозиторий, и платформа выполнит npm run build. Пресет можно задать и переменной окружения при сборке: NITRO_PRESET=vercel.
Статический сайт
npm run generateКоманда собирает HTML всех страниц заранее в .output/public/. Эту папку можно загрузить на любой хостинг статических файлов. Серверных обработчиков при этом нет, поэтому API блога и форма работать не будут.
Частая ошибка
Хранить данные на диске сервера, когда сайт опубликован на бессерверной платформе вроде Vercel или Netlify. Там у сервера нет постоянного диска: файлы из .data/ пропадут, и статьи будут исчезать. Для таких платформ подключите хранилище useStorage к внешней службе (Redis, облачному хранилищу платформы) или используйте внешнюю базу данных.