Всем привет!
Сегодня мы создадим батник, который автоматически установит node js для RedAge 3.0, зависимости и скомпилирует поочередно клиент и cef
Заходим в корень проекта
Создаем текстовый файл, и переименовываем его меняя расширение .txt на .bat и называем его build, получается файл build.bat
Далее открываем его с помощью например блокнота, или VScode, cursor или любым другим редактором и вставляем следующий код:
Запускаем батник и радуемся!
Сегодня мы создадим батник, который автоматически установит node js для RedAge 3.0, зависимости и скомпилирует поочередно клиент и cef
Заходим в корень проекта
Код:
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
set "ERROR=0"
set "NODE_VERSION=16.14.0"
set "NVM_VERSION=1.1.11"
set "NVM_INSTALLED=0"
set "NODE_INSTALLED=0"
set "DOTNET_VERSION=3.1"
set "DOTNET_SDK_INSTALLED=0"
:: Меню выбора
:menu
cls
echo ========================================
echo Меню компиляции проекта
echo ========================================
echo.
echo 1. Установка Node.js
echo 2. Компиляция клиента (src_client)
echo 3. Компиляция CEF (src_cef)
echo 4. Компиляция CEF и клиента
echo 5. Установка .NET SDK
echo 6. Компиляция .NET проекта (dotnet/resources)
echo 7. Компиляция всего проекта (CEF + клиент + .NET)
echo 0. Выход
echo.
echo ========================================
set /p "choice=Выберите действие (0-7): "
if "%choice%"=="1" goto :install_nodejs
if "%choice%"=="2" goto :build_client
if "%choice%"=="3" goto :build_cef
if "%choice%"=="4" goto :build_both
if "%choice%"=="5" goto :install_dotnet
if "%choice%"=="6" goto :build_dotnet
if "%choice%"=="7" goto :build_all
if "%choice%"=="0" goto :end_script
echo.
echo [ОШИБКА] Неверный выбор. Попробуйте снова.
timeout /t 2 /nobreak >nul
goto :menu
:: Установка Node.js
:install_nodejs
echo.
echo ========================================
echo Установка Node.js
echo ========================================
echo.
call :check_nvm
if %ERROR%==1 goto :end_install_nodejs
call :install_node
if %ERROR%==1 goto :end_install_nodejs
:end_install_nodejs
echo.
if %ERROR%==1 (
echo ========================================
echo Ошибка при установке Node.js
echo ========================================
) else (
echo ========================================
echo Node.js установлен успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция клиента
:build_client
echo.
echo ========================================
echo Компиляция клиента (src_client)
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_client
call :build_src_client
if %ERROR%==1 goto :end_build_client
:end_build_client
echo.
if %ERROR%==1 (
echo ========================================
echo Компиляция клиента завершена с ошибками
echo ========================================
) else (
echo ========================================
echo Компиляция клиента завершена успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция CEF
:build_cef
echo.
echo ========================================
echo Компиляция CEF (src_cef)
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_cef
call :build_src_cef
if %ERROR%==1 goto :end_build_cef
:end_build_cef
echo.
if %ERROR%==1 (
echo ========================================
echo Компиляция CEF завершена с ошибками
echo ========================================
) else (
echo ========================================
echo Компиляция CEF завершена успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция обоих
:build_both
echo.
echo ========================================
echo Компиляция CEF и клиента
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_both
call :build_src_client
if %ERROR%==1 goto :end_build_both
echo.
call :build_src_cef
if %ERROR%==1 goto :end_build_both
:end_build_both
echo.
if %ERROR%==1 (
echo ========================================
echo Компиляция завершена с ошибками
echo ========================================
) else (
echo ========================================
echo Компиляция завершена успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Установка .NET SDK
:install_dotnet
echo.
echo ========================================
echo Установка .NET SDK
echo ========================================
echo.
call :check_dotnet_sdk
if %ERROR%==0 goto :end_install_dotnet
call :install_dotnet_sdk
if %ERROR%==1 goto :end_install_dotnet
:end_install_dotnet
echo.
if %ERROR%==1 (
echo ========================================
echo Ошибка при установке .NET SDK
echo ========================================
) else (
echo ========================================
echo .NET SDK установлен успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция .NET проекта
:build_dotnet
echo.
echo ========================================
echo Компиляция .NET проекта (dotnet/resources)
echo ========================================
echo.
call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_dotnet
call :build_dotnet_project
if %ERROR%==1 goto :end_build_dotnet
:end_build_dotnet
echo.
if %ERROR%==1 (
echo ========================================
echo Компиляция .NET проекта завершена с ошибками
echo ========================================
) else (
echo ========================================
echo Компиляция .NET проекта завершена успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Компиляция всего проекта
:build_all
echo.
echo ========================================
echo Компиляция всего проекта
echo ========================================
echo.
call :check_nodejs
if %ERROR%==1 goto :end_build_all
call :check_dotnet_sdk
if %ERROR%==1 goto :end_build_all
echo [1/3] Компиляция клиента...
call :build_src_client
if %ERROR%==1 goto :end_build_all
echo.
echo [2/3] Компиляция CEF...
call :build_src_cef
if %ERROR%==1 goto :end_build_all
echo.
echo [3/3] Компиляция .NET проекта...
call :build_dotnet_project
if %ERROR%==1 goto :end_build_all
:end_build_all
echo.
if %ERROR%==1 (
echo ========================================
echo Компиляция завершена с ошибками
echo ========================================
) else (
echo ========================================
echo Компиляция всего проекта завершена успешно
echo ========================================
)
echo.
pause
set "ERROR=0"
goto :menu
:: Выход
:end_script
exit /b 0
:: ========================================
:: Функции
:: ========================================
:: Проверка наличия nvm-windows
:check_nvm
echo [Шаг 1/2] Проверка nvm-windows...
echo ----------------------------------------
where nvm >nul 2>&1
if %errorlevel%==0 (
echo [OK] nvm-windows найден
set "NVM_INSTALLED=1"
goto :eof
)
echo nvm-windows не найден, попытка автоматической установки...
:: Проверяем наличие установщика nvm-windows
set "NVM_INSTALLER=nvm-setup.exe"
set "NVM_URL=https://github.com/coreybutler/nvm-windows/releases/download/%NVM_VERSION%/nvm-setup.exe"
if not exist "%TEMP%\%NVM_INSTALLER%" (
echo Скачивание установщика nvm-windows...
echo Это может занять некоторое время...
:: Пытаемся скачать через PowerShell
powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NVM_URL%' -OutFile '%TEMP%\%NVM_INSTALLER%' -UseBasicParsing}" >nul 2>&1
if not exist "%TEMP%\%NVM_INSTALLER%" (
echo [ОШИБКА] Не удалось скачать установщик nvm-windows
echo Пожалуйста, скачайте и установите nvm-windows вручную:
echo %NVM_URL%
echo После установки перезапустите этот скрипт
set "ERROR=1"
goto :eof
)
)
echo Установка nvm-windows...
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"
:: Запускаем установщик
start /wait "" "%TEMP%\%NVM_INSTALLER%" /S
:: Ждем немного после установки
timeout /t 3 /nobreak >nul
:: Обновляем переменные окружения в текущей сессии
call refreshenv >nul 2>&1
:: Проверяем установку через реестр
reg query "HKCU\Software\nvm" >nul 2>&1
if %errorlevel%==0 (
echo [OK] nvm-windows установлен
set "NVM_INSTALLED=1"
:: Добавляем путь nvm в PATH текущей сессии
for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
if defined NVM_ROOT (
set "PATH=%NVM_ROOT%;%PATH%"
)
) else (
:: Пробуем найти nvm в стандартных местах
if exist "%APPDATA%\nvm\nvm.exe" (
set "NVM_ROOT=%APPDATA%\nvm"
set "PATH=%NVM_ROOT%;%PATH%"
set "NVM_INSTALLED=1"
echo [OK] nvm-windows найден в %NVM_ROOT%
) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
set "NVM_ROOT=%PROGRAMFILES%\nvm"
set "PATH=%NVM_ROOT%;%PATH%"
set "NVM_INSTALLED=1"
echo [OK] nvm-windows найден в %NVM_ROOT%
) else (
echo [ОШИБКА] Не удалось найти установленный nvm-windows
echo Возможно, требуется перезапуск командной строки или системы
echo Пожалуйста, перезапустите этот скрипт после установки nvm-windows
set "ERROR=1"
goto :eof
)
)
if %NVM_INSTALLED%==0 (
echo [ОШИБКА] Не удалось установить или найти nvm-windows
set "ERROR=1"
)
goto :eof
:: Установка Node.js через nvm
:install_node
echo.
echo [Шаг 2/2] Проверка Node.js через nvm...
echo ----------------------------------------
:: Используем nvm для проверки установленных версий
call nvm list >nul 2>&1
if errorlevel 1 (
echo [ВНИМАНИЕ] Команда nvm не работает в текущей сессии
echo Попытка обновления переменных окружения...
:: Пробуем найти nvm в реестре и добавить в PATH
for /f "tokens=2*" %%A in ('reg query "HKCU\Software\nvm" /v root 2^>nul') do set "NVM_ROOT=%%B"
if defined NVM_ROOT (
set "PATH=%NVM_ROOT%;%PATH%"
)
:: Пробуем использовать полный путь к nvm
if exist "%APPDATA%\nvm\nvm.exe" (
set "NVM_CMD=%APPDATA%\nvm\nvm.exe"
) else if exist "%PROGRAMFILES%\nvm\nvm.exe" (
set "NVM_CMD=%PROGRAMFILES%\nvm\nvm.exe"
) else (
set "NVM_CMD=nvm"
)
) else (
set "NVM_CMD=nvm"
)
:: Проверяем, установлена ли нужная версия Node.js
call %NVM_CMD% list | findstr /C:"%NODE_VERSION%" >nul
if %errorlevel%==0 (
echo Версия Node.js %NODE_VERSION% уже установлена
call %NVM_CMD% use %NODE_VERSION% >nul 2>&1
if errorlevel 1 (
echo [ВНИМАНИЕ] Не удалось переключиться на версию %NODE_VERSION%
echo Попытка продолжения...
) else (
echo [OK] Переключено на Node.js %NODE_VERSION%
set "NODE_INSTALLED=1"
)
) else (
echo Установка Node.js %NODE_VERSION% через nvm...
call %NVM_CMD% install %NODE_VERSION%
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить Node.js %NODE_VERSION%
set "ERROR=1"
goto :eof
)
call %NVM_CMD% use %NODE_VERSION%
if errorlevel 1 (
echo [ОШИБКА] Не удалось переключиться на версию %NODE_VERSION%
set "ERROR=1"
goto :eof
)
echo [OK] Node.js %NODE_VERSION% установлен и активирован
set "NODE_INSTALLED=1"
)
:: Проверяем, что Node.js доступен
where node >nul 2>&1
if %errorlevel%==0 (
for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
echo Текущая версия Node.js: %CURRENT_NODE_VERSION%
echo [OK] Node.js готов к использованию
set "NODE_INSTALLED=1"
) else (
echo [ОШИБКА] Node.js не доступен после установки
echo Возможно, требуется перезапуск командной строки
set "ERROR=1"
goto :eof
)
if %NODE_INSTALLED%==0 (
echo [ОШИБКА] Не удалось установить или использовать Node.js
set "ERROR=1"
)
goto :eof
:: Проверка наличия Node.js (для компиляции)
:check_nodejs
where node >nul 2>&1
if %errorlevel%==0 (
for /f "tokens=*" %%i in ('node --version') do set "CURRENT_NODE_VERSION=%%i"
echo [OK] Node.js найден: %CURRENT_NODE_VERSION%
echo.
goto :eof
)
echo [ОШИБКА] Node.js не найден
echo Пожалуйста, сначала установите Node.js (выберите пункт 1 в меню)
set "ERROR=1"
goto :eof
:: Компиляция src_client
:build_src_client
echo Компиляция src_client...
echo ----------------------------------------
cd src_client
if not exist "node_modules" (
echo Установка зависимостей для src_client...
call npm install
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить зависимости для src_client
set "ERROR=1"
cd ..
goto :eof
)
)
call npm run build
if errorlevel 1 (
echo [ОШИБКА] Компиляция src_client не удалась
set "ERROR=1"
) else (
echo [УСПЕХ] src_client скомпилирован успешно
)
cd ..
goto :eof
:: Компиляция src_cef
:build_src_cef
echo Компиляция src_cef...
echo ----------------------------------------
cd src_cef
if not exist "node_modules" (
echo Установка зависимостей для src_cef...
call npm install --legacy-peer-deps
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить зависимости для src_cef
set "ERROR=1"
cd ..
goto :eof
)
)
call npm run build
if errorlevel 1 (
echo [ОШИБКА] Компиляция src_cef не удалась
set "ERROR=1"
) else (
echo [УСПЕХ] src_cef скомпилирован успешно
)
cd ..
goto :eof
:: Проверка наличия .NET SDK
:check_dotnet_sdk
set "ERROR=0"
where dotnet >nul 2>&1
if %errorlevel%==0 (
for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
echo [OK] .NET SDK найден: %CURRENT_DOTNET_VERSION%
:: Проверяем, что установлена нужная версия или совместимая
echo Проверка версии .NET SDK...
dotnet --list-sdks | findstr /C:"%DOTNET_VERSION%" >nul
if %errorlevel%==0 (
echo [OK] .NET SDK %DOTNET_VERSION% установлен
set "DOTNET_SDK_INSTALLED=1"
set "ERROR=0"
echo.
goto :eof
) else (
echo [ВНИМАНИЕ] .NET SDK %DOTNET_VERSION% не найден в списке установленных версий
echo Установленные версии:
dotnet --list-sdks
echo.
echo Продолжаем с текущей версией...
set "DOTNET_SDK_INSTALLED=1"
set "ERROR=0"
echo.
goto :eof
)
)
echo [ОШИБКА] .NET SDK не найден
echo Пожалуйста, сначала установите .NET SDK (выберите пункт 5 в меню)
set "ERROR=1"
goto :eof
:: Установка .NET SDK
:install_dotnet_sdk
set "ERROR=0"
echo [Шаг 1/2] Определение архитектуры системы...
echo ----------------------------------------
:: Определяем архитектуру (x64 или x86)
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
set "ARCH=x64"
) else if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set "ARCH=x86"
) else (
set "ARCH=x64"
)
echo Архитектура: %ARCH%
echo.
echo [Шаг 2/2] Установка .NET SDK %DOTNET_VERSION%...
echo ----------------------------------------
echo ВНИМАНИЕ: Установка может потребовать прав администратора
echo Если появится запрос UAC, нажмите "Да"
echo.
:: Используем dotnet-install скрипт для установки
set "DOTNET_INSTALL_SCRIPT=%TEMP%\dotnet-install.ps1"
set "DOTNET_INSTALL_URL=https://dot.net/v1/dotnet-install.ps1"
echo Скачивание установщика .NET SDK...
powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%DOTNET_INSTALL_URL%' -OutFile '%DOTNET_INSTALL_SCRIPT%' -UseBasicParsing}" >nul 2>&1
if not exist "%DOTNET_INSTALL_SCRIPT%" (
echo [ОШИБКА] Не удалось скачать установщик .NET SDK
echo Пожалуйста, скачайте и установите .NET SDK %DOTNET_VERSION% вручную:
echo https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
set "ERROR=1"
goto :eof
)
echo Установка .NET SDK %DOTNET_VERSION%...
powershell -ExecutionPolicy Bypass -Command "& '%DOTNET_INSTALL_SCRIPT%' -Channel %DOTNET_VERSION% -Architecture %ARCH% -InstallDir '%USERPROFILE%\.dotnet'"
if errorlevel 1 (
echo [ОШИБКА] Не удалось установить .NET SDK %DOTNET_VERSION%
echo Попробуйте установить вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
set "ERROR=1"
goto :eof
)
:: Обновляем PATH для текущей сессии
set "DOTNET_ROOT=%USERPROFILE%\.dotnet"
if exist "%DOTNET_ROOT%\dotnet.exe" (
set "PATH=%DOTNET_ROOT%;%PATH%"
)
:: Проверяем также стандартные места установки
if exist "%ProgramFiles%\dotnet\dotnet.exe" (
set "PATH=%ProgramFiles%\dotnet;%PATH%"
)
if exist "%ProgramFiles(x86)%\dotnet\dotnet.exe" (
set "PATH=%ProgramFiles(x86)%\dotnet;%PATH%"
)
:: Проверяем установку
timeout /t 3 /nobreak >nul
where dotnet >nul 2>&1
if %errorlevel%==0 (
for /f "tokens=*" %%i in ('dotnet --version 2^>nul') do set "CURRENT_DOTNET_VERSION=%%i"
echo [OK] .NET SDK установлен: %CURRENT_DOTNET_VERSION%
set "DOTNET_SDK_INSTALLED=1"
set "ERROR=0"
) else (
echo [ВНИМАНИЕ] .NET SDK установлен, но не доступен в текущей сессии
echo Возможно, требуется перезапуск командной строки
echo Путь установки: %DOTNET_ROOT%
echo.
echo Попробуйте перезапустить командную строку и запустить скрипт снова
echo Или установите .NET SDK вручную: https://dotnet.microsoft.com/download/dotnet/%DOTNET_VERSION%
set "ERROR=1"
)
goto :eof
:: Компиляция .NET проекта
:build_dotnet_project
set "ERROR=0"
echo Компиляция .NET проекта (dotnet/resources)...
echo ----------------------------------------
cd dotnet\resources
if not exist "NeptuneEvo.sln" (
echo [ОШИБКА] Файл NeptuneEvo.sln не найден
set "ERROR=1"
cd ..\..
goto :eof
)
echo Восстановление зависимостей NuGet...
dotnet restore NeptuneEvo.sln
if errorlevel 1 (
echo [ОШИБКА] Не удалось восстановить зависимости NuGet
set "ERROR=1"
cd ..\..
goto :eof
)
echo Компиляция решения...
echo Конфигурация: Debug (сервер ищет файлы в bin\Debug)
echo.
:: Собираем решение
dotnet build NeptuneEvo.sln --configuration Debug -p:Platform=x64
if errorlevel 1 (
echo [ОШИБКА] Компиляция .NET проекта не удалась
set "ERROR=1"
cd ..\..
goto :eof
)
:: Публикуем основной проект для копирования всех зависимостей
echo Публикация проекта NeptuneEvo для копирования зависимостей...
cd NeptuneEvo
dotnet publish --configuration Debug -p:Platform=x64 -p:CopyLocalLockFileAssemblies=true -o bin\Debug\netcoreapp3.1
if errorlevel 1 (
echo [ВНИМАНИЕ] Публикация с --no-build не удалась, пробуем полную пересборку...
dotnet publish --configuration Debug -p:Platform=x64 -p:CopyLocalLockFileAssemblies=true -o bin\Debug\netcoreapp3.1 --force
if errorlevel 1 (
echo [ОШИБКА] Публикация проекта не удалась
set "ERROR=1"
cd ..\..
goto :eof
)
)
cd ..
if %ERROR%==0 (
echo [УСПЕХ] .NET проект скомпилирован и опубликован успешно
echo Все зависимости скопированы в: dotnet\resources\NeptuneEvo\bin\Debug\netcoreapp3.1\
)
cd ..\..
goto :eof
Последнее редактирование: