diff --git a/n8n-n8n-1.109.2/start.bat b/n8n-n8n-1.109.2/start.bat index e69de29b..50473e5f 100644 --- a/n8n-n8n-1.109.2/start.bat +++ b/n8n-n8n-1.109.2/start.bat @@ -0,0 +1,524 @@ +@echo off +REM 保存原始编码 +for /f "tokens=2 delims=:" %%a in ('chcp') do set OLDCP=%%a +chcp 65001 >nul 2>&1 +REM n8n 中文版快速启动脚本 (Windows版 - 增强兼容性) +REM 作者: 小齐 +REM 最后更新: 2025-09-08 +REM 兼容性: Windows 7/8/10/11, PowerShell/CMD + +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=" +set "SKIP_DEPS=" +set "USE_NPM=" +set "CUSTOM_PORT=5678" + +: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 +) +if /I "%~1"=="--skip-deps" ( + set "SKIP_DEPS=true" + shift + goto parse_args +) +if /I "%~1"=="--npm" ( + set "USE_NPM=true" + shift + goto parse_args +) +if /I "%~1"=="-p" ( + set "CUSTOM_PORT=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--port" ( + set "CUSTOM_PORT=%~2" + shift + shift + goto parse_args +) +echo [错误] 未知选项: %~1 +goto show_help + +:main_execution +REM 检查操作系统版本 +call :check_os_version + +REM 检查并切换到正确目录 +call :check_and_change_directory +if errorlevel 1 goto error_exit + +REM 检查依赖 +if not defined SKIP_DEPS ( + echo [信息] 正在检查系统依赖... + 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 [成功] 系统状态检查完成,一切正常 + goto end +) + +REM 安装依赖(如果需要) +if not exist "node_modules\" ( + echo [信息] 检测到缺少依赖,正在安装... + if defined USE_NPM ( + call :install_with_npm + ) else ( + call :install_with_pnpm + ) + if errorlevel 1 goto error_exit +) + +REM 检查并安装 run-script-os(解决常见问题) +if not exist "node_modules +un-script-os" ( + echo [修复] 安装 run-script-os... + call npm install run-script-os +) + +REM 强制构建或检查构建状态 +if defined FORCE_BUILD ( + echo [信息] 强制重新构建项目... + call :build_project + if errorlevel 1 goto error_exit +) else ( + call :check_build + if errorlevel 1 goto error_exit +) + +REM 开发模式或正常启动 +if defined DEV_MODE ( + echo [信息] 正在以开发模式启动 n8n... + echo [警告] 开发模式启动时间较长,请耐心等待... + if defined USE_NPM ( + call npm run dev + ) else ( + call pnpm dev + ) +) else ( + call :start_n8n +) +goto end + +REM ========== 函数定义 ========== + +:check_os_version +REM 检查 Windows 版本兼容性 +ver | findstr /i "5\.1\." >nul +if not errorlevel 1 ( + echo [警告] 检测到 Windows XP,可能存在兼容性问题 +) +ver | findstr /i "6\.0\." >nul +if not errorlevel 1 ( + echo [信息] 检测到 Windows Vista +) +ver | findstr /i "6\.1\." >nul +if not errorlevel 1 ( + echo [信息] 检测到 Windows 7 +) +ver | findstr /i "6\.2\." >nul +if not errorlevel 1 ( + echo [信息] 检测到 Windows 8 +) +ver | findstr /i "6\.3\." >nul +if not errorlevel 1 ( + echo [信息] 检测到 Windows 8.1 +) +ver | findstr /i "10\.0\." >nul +if not errorlevel 1 ( + echo [信息] 检测到 Windows 10/11 +) +exit /b 0 + +:check_and_change_directory +REM 检查当前目录是否为 n8n 项目目录 +if exist "package.json" if exist "packages" ( + echo [信息] 检测到当前已在 n8n 项目目录 + exit /b 0 +) + +REM 获取脚本所在目录(兼容不同 Windows 版本) +set "SCRIPT_DIR=%~dp0" +if "%SCRIPT_DIR:~-1%"=="\" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%" + +REM 如果脚本在 n8n-n8n-1.109.2 目录内 +echo %SCRIPT_DIR% | findstr /I /C:"n8n-n8n-1.109.2" >nul +if not errorlevel 1 ( + echo [信息] 切换到脚本所在的 n8n 项目目录 + cd /d "%SCRIPT_DIR%" 2>nul + if errorlevel 1 ( + REM 兼容旧版 Windows + cd "%SCRIPT_DIR%" 2>nul + if errorlevel 1 ( + echo [错误] 无法切换到目录: %SCRIPT_DIR% + exit /b 1 + ) + ) + echo [成功] 已切换到正确的 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 [错误] 未找到 n8n-n8n-1.109.2 目录 + echo [信息] 请确保在正确的项目目录下运行此脚本 + exit /b 1 +) + +REM 验证目录结构 +if not exist "package.json" ( + echo [错误] 目录结构不正确,缺少 package.json + exit /b 1 +) +if not exist "packages" ( + echo [错误] 目录结构不正确,缺少 packages 目录 + exit /b 1 +) + +echo [成功] 已切换到正确的 n8n 项目目录 +exit /b 0 + +:check_dependencies +REM 检查 Node.js +where node >nul 2>&1 +if errorlevel 1 ( + REM 尝试常见的 Node.js 安装路径 + if exist "C:\Program Files\nodejs\node.exe" ( + set "PATH=C:\Program Files\nodejs;%PATH%" + ) else if exist "C:\Program Files (x86)\nodejs\node.exe" ( + set "PATH=C:\Program Files (x86)\nodejs;%PATH%" + ) else ( + echo [错误] Node.js 未安装或未在 PATH 中 + echo [信息] 请访问 https://nodejs.org 下载安装 + exit /b 1 + ) +) + +echo [信息] Node.js 版本: +node --version + +REM 检查包管理器 +if not defined USE_NPM ( + where pnpm >nul 2>&1 + if errorlevel 1 ( + echo [警告] pnpm 未安装,尝试使用 npm + set "USE_NPM=true" + ) else ( + echo [信息] 使用 pnpm 作为包管理器 + ) +) else ( + echo [信息] 使用 npm 作为包管理器 +) + +echo [成功] 依赖检查通过 +exit /b 0 + +:install_with_pnpm +echo [信息] 使用 pnpm 安装依赖... +where pnpm >nul 2>&1 +if errorlevel 1 ( + echo [信息] 正在安装 pnpm... + call npm install -g pnpm@8 + if errorlevel 1 ( + echo [错误] pnpm 安装失败 + exit /b 1 + ) +) +call pnpm install --no-frozen-lockfile +exit /b %errorlevel% + +:install_with_npm +echo [警告] 使用 npm 安装(可能不兼容 workspace) +echo [信息] 建议安装 pnpm: npm install -g pnpm +call npm install --legacy-peer-deps +exit /b %errorlevel% + +:check_port +REM 检查端口是否被占用 +echo [信息] 检查端口 %CUSTOM_PORT% 是否可用... +netstat -ano 2>nul | findstr ":%CUSTOM_PORT%" >nul 2>&1 +if not errorlevel 1 ( + echo [警告] 端口 %CUSTOM_PORT% 已被占用 + echo [信息] 正在查看占用进程... + netstat -ano | findstr ":%CUSTOM_PORT%" + echo. + + set /p "kill_process=是否终止占用进程?(y/N): " + if /I "!kill_process!"=="y" ( + echo [信息] 正在终止占用进程... + for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%CUSTOM_PORT%"') do ( + taskkill /PID %%a /F >nul 2>&1 + if errorlevel 1 ( + REM Windows 7 兼容性 + tskill %%a >nul 2>&1 + ) + ) + echo [成功] 进程已终止 + timeout /t 2 /nobreak >nul 2>&1 + if errorlevel 1 ( + REM Windows 7 兼容性 + ping -n 3 127.0.0.1 >nul + ) + ) else ( + echo [错误] 无法启动 n8n,端口被占用 + exit /b 1 + ) +) +exit /b 0 + +:stop_existing +echo [信息] 正在停止现有的 n8n 进程... + +REM 停止可能存在的 n8n 相关进程 +taskkill /F /IM node.exe /FI "WINDOWTITLE eq *n8n*" >nul 2>&1 +taskkill /F /IM node.exe /FI "WINDOWTITLE eq *pnpm*" >nul 2>&1 +taskkill /F /IM node.exe /FI "WINDOWTITLE eq *npm*" >nul 2>&1 + +REM 等待 +timeout /t 2 /nobreak >nul 2>&1 +if errorlevel 1 ( + ping -n 3 127.0.0.1 >nul +) + +echo [成功] 已停止现有进程 +exit /b 0 + +:setup_environment +echo [信息] 正在设置环境变量... + +set "N8N_PORT=%CUSTOM_PORT%" +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" +set "NODE_OPTIONS=--max-old-space-size=4096" + +echo [成功] 环境变量已设置 +echo - N8N_PORT=%CUSTOM_PORT% +echo - N8N_DEFAULT_LOCALE=zh-CN +echo - N8N_SECURE_COOKIE=false +echo - DB_SQLITE_POOL_SIZE=5 +echo - NODE_OPTIONS=--max-old-space-size=4096 +exit /b 0 + +:check_build +if not exist "packages\cli\dist\" goto need_build +if not exist "packages\core\dist\" goto need_build +if not exist "packages\workflow\dist\" goto need_build +exit /b 0 + +:need_build +echo [警告] 检测到项目需要构建 +set /p "build_project=是否现在构建项目?这可能需要几分钟时间 (y/N): " +if /I "!build_project!"=="y" ( + call :build_project +) +exit /b 0 + +:build_project +echo [信息] 正在构建项目... +if defined USE_NPM ( + call npm run build > build.log 2>&1 +) else ( + call pnpm build > build.log 2>&1 +) +if errorlevel 1 ( + echo [错误] 构建失败,请查看 build.log + type build.log | more + exit /b 1 +) +echo [成功] 项目构建完成 +exit /b 0 + +:start_n8n +echo [信息] 正在启动 n8n 中文版... + +REM 创建日志文件名(兼容不同日期格式) +REM 处理不同的日期格式 +set "DATETIME=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%" +REM 移除空格和斜杠等特殊字符 +set "DATETIME=%DATETIME: =0%" +set "DATETIME=%DATETIME:/=%" +set "DATETIME=%DATETIME:\=%" +set "LOG_FILE=n8n-%DATETIME%.log" + +echo [信息] 正在启动 n8n 服务... +echo [信息] 日志文件: %LOG_FILE% + +REM 启动 n8n +if defined USE_NPM ( + start "n8n Server" /B cmd /c "npm start > %LOG_FILE% 2>&1" +) else ( + 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 60 goto start_failed + +REM 检查端口是否开启 +netstat -an 2>nul | findstr ":%CUSTOM_PORT%" | findstr "LISTENING" >nul 2>&1 +if not errorlevel 1 goto start_success + +REM 显示进度 +set /p "=." nul 2>&1 +if errorlevel 1 ( + ping -n 2 127.0.0.1 >nul +) +goto wait_loop + +:start_success +echo. +echo [成功] n8n 启动成功! +echo. +echo ========== 启动信息 ========== +echo 访问地址: http://localhost:%CUSTOM_PORT% +echo 界面语言: 中文 (zh-CN) +echo 日志文件: %LOG_FILE% +echo ============================= +echo. +echo [信息] 使用 Ctrl+C 停止服务 +echo [提示] 首次访问需要设置账户 +echo. +pause +exit /b 0 + +:start_failed +echo. +echo [错误] n8n 启动失败 +echo [信息] 查看日志文件: %LOG_FILE% +if exist "%LOG_FILE%" ( + echo. + echo ===== 错误日志 ===== + type "%LOG_FILE%" | more +) + +REM 尝试备用启动方式 +echo. +echo [信息] 尝试备用启动方式... +call npx n8n +if errorlevel 1 ( + echo [错误] 备用方式也失败 + echo. + echo 请尝试: + echo 1. 运行: npm install run-script-os + echo 2. 运行: node packages/cli/bin/n8n +) +pause +exit /b 1 + +:show_help +echo 用法: %~nx0 [选项] +echo. +echo 选项: +echo -h, --help 显示此帮助信息 +echo -d, --dev 使用开发模式启动 (支持热重载) +echo -b, --build 强制重新构建项目 +echo -c, --check 仅检查系统状态,不启动 +echo -p, --port 指定端口 (默认: 5678) +echo --skip-deps 跳过依赖检查 +echo --npm 使用 npm 替代 pnpm +echo. +echo 示例: +echo %~nx0 # 正常启动 (默认端口 5678) +echo %~nx0 -p 8080 # 使用端口 8080 启动 +echo %~nx0 -d # 开发模式启动 +echo %~nx0 -b # 重新构建并启动 +echo %~nx0 --npm # 使用 npm 启动 +echo %~nx0 -p 3000 -d # 在端口 3000 上开发模式启动 +echo. +echo 故障排除: +echo 1. 如果 pnpm 安装失败,使用 --npm 选项 +echo 2. 如果端口被占用,脚本会提示终止进程 +echo 3. 构建失败时查看 build.log 文件 +echo. +goto end + +:error_exit +echo [错误] 脚本执行失败 +echo. +echo 常见问题解决: +echo 1. 确保 Node.js 版本为 18.x 或 20.x +echo 2. 尝试使用管理员权限运行 +echo 3. 使用 --npm 选项如果 pnpm 有问题 +echo 4. 检查网络连接和代理设置 +echo. +pause +exit /b 1 + +:end +REM 恢复原编码 +if defined OLDCP ( + chcp %OLDCP% >nul 2>&1 +) +endlocal +exit /b 0 \ No newline at end of file