@echo off chcp 65001 >nul 2>&1 REM n8n 中文版快速启动脚本 (Windows版) REM 作者: 小齐 REM 最后更新: 2025-09-08 setlocal enabledelayedexpansion REM 显示启动横幅 :show_banner echo ====================================== echo n8n 中文版快速启动脚本 echo 版本: n8n-1.109.2 with 中文翻译 echo 维护者: xiaoqi echo ====================================== echo. REM 解析命令行参数 set "DEV_MODE=" set "FORCE_BUILD=" set "CHECK_ONLY=" :parse_args if "%~1"=="" goto main_execution if /I "%~1"=="-h" goto show_help if /I "%~1"=="--help" goto show_help if /I "%~1"=="-d" ( set "DEV_MODE=true" shift goto parse_args ) if /I "%~1"=="--dev" ( set "DEV_MODE=true" shift goto parse_args ) if /I "%~1"=="-b" ( set "FORCE_BUILD=true" shift goto parse_args ) if /I "%~1"=="--build" ( set "FORCE_BUILD=true" shift goto parse_args ) if /I "%~1"=="-c" ( set "CHECK_ONLY=true" shift goto parse_args ) if /I "%~1"=="--check" ( set "CHECK_ONLY=true" shift goto parse_args ) echo [错误] 未知选项: %~1 goto show_help :main_execution REM 检查并切换到正确目录 call :check_and_change_directory if errorlevel 1 goto error_exit REM 检查依赖 echo %BLUE%[信息]%NC% 正在检查系统依赖... call :check_dependencies if errorlevel 1 goto error_exit REM 检查端口占用 call :check_port if errorlevel 1 goto error_exit REM 停止现有进程 call :stop_existing REM 设置环境变量 call :setup_environment REM 仅检查模式 if defined CHECK_ONLY ( echo %GREEN%[成功]%NC% 系统状态检查完成,一切正常 goto end ) REM 强制构建或检查构建状态 if defined FORCE_BUILD ( echo %BLUE%[信息]%NC% 强制重新构建项目... call pnpm build > build.log 2>&1 if errorlevel 1 ( echo %RED%[错误]%NC% 构建失败,请查看 build.log type build.log | more goto error_exit ) echo %GREEN%[成功]%NC% 构建完成 ) else ( call :check_build if errorlevel 1 goto error_exit ) REM 开发模式或正常启动 if defined DEV_MODE ( echo %BLUE%[信息]%NC% 正在以开发模式启动 n8n... echo %YELLOW%[警告]%NC% 开发模式启动时间较长,请耐心等待... call pnpm dev ) else ( call :start_n8n ) goto end REM ========== 函数定义 ========== :check_and_change_directory REM 检查当前目录是否为 n8n 项目目录 if exist "package.json" if exist "packages" ( echo %BLUE%[信息]%NC% 检测到当前已在 n8n 项目目录 exit /b 0 ) REM 获取脚本所在目录 set "SCRIPT_DIR=%~dp0" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%" REM 如果脚本在 n8n-n8n-1.109.2 目录内 echo %SCRIPT_DIR% | findstr /C:"n8n-n8n-1.109.2" >nul if not errorlevel 1 ( echo %BLUE%[信息]%NC% 切换到脚本所在的 n8n 项目目录: %SCRIPT_DIR% cd /d "%SCRIPT_DIR%" if errorlevel 1 ( echo %RED%[错误]%NC% 无法切换到目录: %SCRIPT_DIR% exit /b 1 ) echo %GREEN%[成功]%NC% 已切换到正确的 n8n 项目目录 exit /b 0 ) REM 尝试找到 n8n-n8n-1.109.2 目录 if exist "n8n-n8n-1.109.2\" ( cd n8n-n8n-1.109.2 ) else if exist "..\n8n-n8n-1.109.2\" ( cd ..\n8n-n8n-1.109.2 ) else if exist "..\..\n8n-n8n-1.109.2\" ( cd ..\..\n8n-n8n-1.109.2 ) else ( echo %RED%[错误]%NC% 未找到 n8n-n8n-1.109.2 目录 echo %BLUE%[信息]%NC% 请确保在正确的项目目录下运行此脚本 exit /b 1 ) REM 验证目录结构 if not exist "package.json" ( echo %RED%[错误]%NC% 目录结构不正确,缺少 package.json exit /b 1 ) if not exist "packages" ( echo %RED%[错误]%NC% 目录结构不正确,缺少 packages 目录 exit /b 1 ) echo %GREEN%[成功]%NC% 已切换到正确的 n8n 项目目录 exit /b 0 :check_dependencies REM 检查 Node.js where node >nul 2>nul if errorlevel 1 ( echo %RED%[错误]%NC% Node.js 未安装或未在 PATH 中 exit /b 1 ) REM 检查 pnpm where pnpm >nul 2>nul if errorlevel 1 ( echo %RED%[错误]%NC% pnpm 未安装或未在 PATH 中 echo %BLUE%[信息]%NC% 请先安装 pnpm: npm install -g pnpm exit /b 1 ) echo %GREEN%[成功]%NC% 依赖检查通过 exit /b 0 :check_port REM 检查端口 5678 是否被占用 netstat -ano | findstr :5678 >nul 2>nul if not errorlevel 1 ( echo %YELLOW%[警告]%NC% 端口 5678 已被占用 echo %BLUE%[信息]%NC% 正在查看占用进程... netstat -ano | findstr :5678 set /p "kill_process=是否杀死占用进程?(y/N): " if /I "!kill_process!"=="y" ( echo %BLUE%[信息]%NC% 正在终止占用进程... for /f "tokens=5" %%a in ('netstat -ano ^| findstr :5678') do ( taskkill /PID %%a /F >nul 2>nul ) echo %GREEN%[成功]%NC% 进程已终止 ) else ( echo %RED%[错误]%NC% 无法启动 n8n,端口被占用 exit /b 1 ) ) exit /b 0 :stop_existing echo %BLUE%[信息]%NC% 正在停止现有的 n8n 进程... REM 停止可能存在的 n8n 相关进程 taskkill /F /IM node.exe /FI "WINDOWTITLE eq *n8n*" >nul 2>nul taskkill /F /IM node.exe /FI "WINDOWTITLE eq *pnpm*" >nul 2>nul REM 等待2秒 timeout /t 2 /nobreak >nul echo %GREEN%[成功]%NC% 已停止现有进程 exit /b 0 :setup_environment echo %BLUE%[信息]%NC% 正在设置环境变量... set "N8N_DEFAULT_LOCALE=zh-CN" set "N8N_SECURE_COOKIE=false" set "DB_SQLITE_POOL_SIZE=5" set "N8N_RUNNERS_ENABLED=true" set "N8N_BLOCK_ENV_ACCESS_IN_NODE=false" echo %GREEN%[成功]%NC% 环境变量已设置 echo - N8N_DEFAULT_LOCALE=zh-CN echo - N8N_SECURE_COOKIE=false echo - DB_SQLITE_POOL_SIZE=5 exit /b 0 :check_build if not exist "packages\cli\dist\" ( goto need_build ) if not exist "packages\core\dist\" ( goto need_build ) exit /b 0 :need_build echo %YELLOW%[警告]%NC% 检测到项目需要构建 set /p "build_project=是否现在构建项目?这可能需要几分钟时间 (y/N): " if /I "!build_project!"=="y" ( echo %BLUE%[信息]%NC% 正在构建项目... call pnpm build > build.log 2>&1 if errorlevel 1 ( echo %RED%[错误]%NC% 构建失败,请查看 build.log type build.log | more exit /b 1 ) echo %GREEN%[成功]%NC% 项目构建完成 ) exit /b 0 :start_n8n echo %BLUE%[信息]%NC% 正在启动 n8n 中文版... REM 创建日志文件名 for /f "tokens=2-4 delims=/ " %%a in ('date /t') do ( set "today=%%c%%a%%b" ) for /f "tokens=1-2 delims=: " %%a in ('time /t') do ( set "now=%%a%%b" ) set "LOG_FILE=n8n-%today%-%now%.log" set "LOG_FILE=%LOG_FILE: =%" echo %GREEN%正在启动 n8n 服务...%NC% REM 启动 n8n 在新窗口 start "n8n Server" /B cmd /c "pnpm start > %LOG_FILE% 2>&1" REM 等待启动 echo 等待 n8n 启动 set "count=0" :wait_loop set /a count+=1 if %count% gtr 30 goto start_failed REM 检查端口是否开启 netstat -an | findstr :5678 | findstr LISTENING >nul 2>nul if not errorlevel 1 goto start_success REM 显示进度点 nul goto wait_loop :start_success echo. echo %GREEN%[成功]%NC% n8n 启动成功! echo. echo %GREEN%========== 启动信息 ==========%NC% echo 📱 访问地址: %BLUE%http://localhost:5678%NC% echo 🌏 界面语言: %GREEN%中文 (zh-CN)%NC% echo 📝 日志文件: %YELLOW%%LOG_FILE%%NC% echo %GREEN%=============================%NC% echo. echo %BLUE%[信息]%NC% 使用 Ctrl+C 停止服务 echo. echo %YELLOW%[提示]%NC% 正在监控日志输出... echo. REM 持续显示日志 :tail_log if exist "%LOG_FILE%" ( type "%LOG_FILE%" timeout /t 2 /nobreak >nul goto tail_log ) exit /b 0 :start_failed echo. echo %RED%[错误]%NC% n8n 启动失败 echo %BLUE%[信息]%NC% 查看日志文件: %LOG_FILE% if exist "%LOG_FILE%" ( type "%LOG_FILE%" | more ) exit /b 1 :show_help echo 用法: %~nx0 [选项] echo. echo 选项: echo -h, --help 显示此帮助信息 echo -d, --dev 使用开发模式启动 (支持热重载) echo -b, --build 强制重新构建项目 echo -c, --check 仅检查系统状态,不启动 echo. echo 示例: echo %~nx0 # 正常启动 echo %~nx0 -d # 开发模式启动 echo %~nx0 -b # 重新构建并启动 echo. goto end :error_exit echo %RED%[错误]%NC% 脚本执行失败 pause exit /b 1 :end endlocal pause exit /b 0