Перейти к содержимому

Скачать код из v0: почему архив приезжает не таким, как ждёшь

С v0 происходит история, которой нет у других генераторов: человек нажимает «скачать», получает архив и обнаруживает внутри совсем не то, что ожидал. Иногда почти пустую папку. Дальше начинается поиск, и поиск приводит на форум самого Vercel, где ровно этот вопрос задают снова и снова.

Разберёмся, почему так выходит, какие способы забрать код существуют на самом деле и что с полученным делать.

Корень путаницы: v0 отдаёт компонент, а не сайт

Это главное, и без этого остальное непонятно.

Большинство генераторов собирают страницу целиком: разметка, стили, скрипты, всё в одном месте. Открыл файл двойным щелчком, увидел сайт. v0 устроен иначе: он делает компонент интерфейса на React, рассчитанный на то, что вокруг него уже есть проект со сборщиком, с Tailwind и с набором компонентов shadcn/ui.

Из этого следует то, что удивляет людей: полученный код физически не может открыться двойным щелчком. Это не поломка выгрузки и не жадность платформы. Это как получить деталь двигателя и удивиться, что она не едет.

Отсюда же и ощущение «архив пустой». Если в проекте v0 лежала одна страница, использующая пять готовых компонентов, то ваш собственный код это и есть та одна страница. Остальные пять принадлежат библиотеке shadcn/ui, они не ваши и не отдаются копией, они ставятся командой.

Что спрашивают на форуме Vercel

Полезно посмотреть, как именно формулируют вопрос люди, дошедшие до того же места. На форуме самого Vercel это отдельная повторяющаяся тема:

Обратите внимание на состав: это не статьи и не жалобы в соцсетях, это вопросы в поддержку вендора. Такой состав выдачи означает одно: вопрос настоящий, а внятного готового ответа в вебе на него нет.

Четыре способа забрать код, и они дают разное

Способ Что получаете Нужен проект Когда подходит
Копирование из окна кода Текст компонента Да Один компонент, быстро
npx shadcn add по ссылке Компонент ставится в ваш проект вместе с зависимостями Да Основной способ, если проект уже есть
Связка с GitHub Репозиторий с историей Нет, создаётся Нужна копия, которая переживёт аккаунт
Развёртывание на Vercel Работающий адрес Нет Нужен результат, а не исходники

Второй способ и есть тот, который обычно ищут, не зная его названия.

Установка через shadcn CLI

Команда выглядит так: npx shadcn@latest add "https://v0.dev/chat/b/<идентификатор блока>". Она берёт блок из v0 и кладёт его в ваш проект, попутно доставляя недостающие компоненты shadcn/ui, от которых он зависит.

Это принципиально удобнее копирования, потому что решает ту самую проблему с «пустым архивом»: зависимости приезжают вместе с компонентом, а не остаются недостающими деталями.

Если проекта ещё нет, его сначала надо создать. По журналу изменений shadcn CLI, с версии 4 команда инициализации сама разворачивает готовый каркас под Next.js, Vite, Astro и другие, так что шаг «сделать проект» перестал быть отдельным приключением. Порядок в итоге такой: создать каркас, затем добавить в него блоки из v0 по ссылкам.

Что делать, если в архиве оказался один README

Ситуация, из-за которой чаще всего и ищут эту статью. Возможных причин две, и они лечатся по-разному.

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

Ваш код есть, но он маленький. Один файл страницы плюс конфигурация выглядит как «ничего не приехало», особенно рядом с ожиданием увидеть полноценный сайт. Это нормальный размер для компонента. Убедиться можно, открыв файл: если внутри ваша разметка, всё на месте.

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

Четыре проверки для полученного кода

Соберите проект у себя. Установка зависимостей и сборка на вашей машине выявляют половину проблем сразу: отсутствующие файлы, привязку к версии среды, несовпадение конфигурации Tailwind.

Найдите обращения наружу. Поиск по строке http в исходниках. Компонент, обращающийся за данными к внешнему адресу, без этого адреса покажет пустоту.

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

Сверьте дерево файлов. Сравните то, что видно в интерфейсе, с тем, что распаковалось. Расхождение находится за минуту и обнаруживается иначе через месяц.

Отдельно про связку с GitHub

Из всех четырёх способов этот единственный даёт копию, которая не зависит от вашего доступа к платформе. Остальные три отдают срез на момент нажатия: скачали, положили в загрузки, забыли, потеряли вместе с ноутбуком.

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

Дальше обязательный шаг, который почти все пропускают: склонируйте репозиторий в другое место и убедитесь, что проект там собирается. Репозиторий, который вы ни разу не выгружали обратно, это резервная копия, которую ни разу не проверяли. Именно на этом шаге обнаруживаются отсутствующие файлы, приватные зависимости и переменные, существовавшие только на машине платформы.

И запишите отдельно то, что в репозиторий не поедет никогда: значения переменных окружения, привязанные домены, настройки развёртывания. Они живут в настройках проекта на платформе, в файлах их нет, и после отключения аккаунта восстанавливать их будет неоткуда.

Куда положить результат

Собранный проект без серверной части живёт на любом статическом хостинге: Netlify, Cloudflare Pages, GitHub Pages, обычный хостинг по FTP. Порядок переключения домена и проверочный список после переезда разобраны отдельно в статье про перенос на свой хостинг.

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

Как это устроено у нас

Пишем про свой продукт, поэтому конкретно и с оговорками.

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

Выгрузка не привязана к тарифу. Кнопка «Скачать» работает на любом плане. Отдельной платы за возможность забрать свою работу нет.

Если файлов несколько, приезжает архив. Порог считается по числу исходников, а не по виду сборки. Раньше было иначе, и многостраничный сайт уезжал одним документом: часть файлов человек не получал вовсе. Это исправлено, и исправление проверяется тестом.

Внутри архива README на вашем языке. Не перечень файлов, а инструкция: как открыть сразу, какие способы размещения проверены, что делать с исходниками приложения.

Оговорка, которую мы не прячем. Выгруженный сайт самодостаточен полностью. Выгруженная игра тянет по сети движок отрисовки, а выгруженное приложение React, оба с zugo.dev. Ваш код от нас не зависит, но эти библиотеки приезжают извне, и в README прямо написано, какие файлы положить рядом и что поправить, чтобы папка перестала зависеть вообще ни от чего.

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

Соседние разборы про то же самое у других платформ: выгрузка кода из Lovable и скачивание проекта из Bolt.new.

Коротко

v0 отдаёт компонент, а не сайт, и почти вся путаница со «скачать код» растёт отсюда. Основной способ забрать работу это не кнопка выгрузки, а установка блока в свой проект командой npx shadcn@latest add по ссылке на блок; проект при этом можно развернуть той же CLI. Пустой на вид архив чаще всего означает либо действительно пустой проект, либо нормальный размер одного компонента, и различаются они за минуту. А самая надёжная копия это всё равно репозиторий: он остаётся вашим независимо от того, что произойдёт с аккаунтом.

← Все статьи