Files
Agent-n8n/n8n-n8n-1.109.2/start.bat
Yep_Q 7edfb28ddd fix: 修复start.bat路径分隔符语法错误
修复第131行 node_modules\run-script-os 路径问题

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 15:55:25 +08:00

523 lines
13 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@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
timeout /t 1 /nobreak >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