CLI

npx launchkit init — команда для быстрого разворачивания нового проекта из шаблона. Она копирует дерево стартера, готовит .env и переименовывает пакет — без установки зависимостей (это осознанно оставлено следующим шагом, чтобы сама команда укладывалась в секунды).

Использование

npx launchkit init my-app        # создать проект в каталоге ./my-app
npx launchkit init .              # развернуть в текущий каталог
npx launchkit init my-app --force  # разрешить копирование в непустой каталог
npx launchkit help                  # справка

Флаги --force / -f / --yes / -y — синонимы: снимают защиту «каталог не пуст».

Что делает init

  1. Проверяет целевой каталог. Если он не пустой и --force не передан — команда завершается с понятной ошибкой (Каталог не пуст: ... Используйте --force, чтобы продолжить.), ничего не копируя.

  2. Копирует дерево шаблона, исключая build-артефакты, зависимости и историю git:

    export const EXCLUDED_ENTRIES: readonly string[] = [
      'node_modules',
      '.next',
      '.git',
      'dist',
      'coverage',
      '.turbo',
    ];
    

    Локальный .env (если он есть рядом с шаблоном) никогда не копируется — секреты не должны утечь в новый проект. Вместо него копируется .env.example и переименовывается в .env (только если в целевом каталоге ещё нет своего .env).

  3. Переименовывает пакет. package.json в новом каталоге получает name, образованный из имени целевой директории (в нижнем регистре, недопустимые для npm-имени символы заменяются на -). Например, init "My Cool App" даст name: "my-cool-app".

  4. Печатает следующие шаги — что делать дальше, чтобы проект заработал:

    ✔ Проект создан: /path/to/my-app
    
    Дальше:
      cd my-app
      pnpm install
      # заполните .env (DATABASE_URL, AUTH_SECRET, …)
      pnpm db:generate && pnpm db:migrate
      pnpm dev
    

Почему установка зависимостей — отдельный шаг

init — это операция копирования файлов, она укладывается в секунды даже на медленном диске. Установка зависимостей (pnpm install) занимает заметно больше времени и требует сети — команда явно печатает её как следующий шаг вместо того, чтобы блокировать пользователя внутри init.

Программный API

Функции CLI (parseArgs, init, toPackageName) экспортируются из cli/index.ts и покрыты тестами (cli/index.test.ts) — при необходимости их можно переиспользовать в собственных скриптах разворачивания (например, во внутреннем провижининге).