如何在部署脚本中强制退出完成后的Vue CLI线程(等效Ctrl+C)
解决Vue CLI构建完成后线程不退出导致Laravel Forge部署超时的问题
vue-cli-service build输出构建完成提示后不退出进程,通常是因为残留的子进程(比如插件异步任务、未关闭的文件监听)导致的,以下是几种可行的解决办法:
方案1:修改项目构建脚本,强制构建后退出
在项目根目录的package.json中,通过脚本逻辑确保构建完成后进程终止:
方式1:直接在npm脚本中添加退出命令
{ "scripts": { "build": "vue-cli-service build && exit" } }
方式2:用Node脚本包裹构建命令(更可靠)
如果上述方式不生效,说明构建命令未正常返回,可通过Node脚本强制控制进程退出:
创建项目根目录下的build.js文件:
const { execSync } = require('child_process'); try { // 执行构建命令并同步输出日志 execSync('vue-cli-service build', { stdio: 'inherit' }); // 构建成功后强制退出进程 process.exit(0); } catch (error) { console.error('构建失败:', error.message); // 构建失败时返回错误码退出 process.exit(1); }
修改package.json的build脚本:
{ "scripts": { "build": "node build.js" } }
方案2:在Laravel Forge部署脚本中监听输出,强制终止进程
如果不想修改项目代码,可在部署脚本中后台运行构建命令,监听日志并在完成时杀掉进程:
git pull origin $FORGE_SITE_BRANCH; # 后台启动构建进程并记录PID npm run build & BUILD_PID=$! # 实时输出日志,监听构建完成提示 while IFS= read -r line; do echo "$line" # 匹配构建完成的提示文本 if [[ "$line" == *"Build complete"* ]]; then kill $BUILD_PID break fi done < <(npm run build 2>&1) ( flock -w 10 9 || exit 1 echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock if [ -f artisan ]; then $FORGE_PHP artisan migrate --force fi
方案3:用timeout命令限制构建进程运行时间
若构建时间稳定,可通过timeout命令设置最大运行时长,超时自动终止进程:
git pull origin $FORGE_SITE_BRANCH; # 设置10分钟超时,根据实际构建时间调整 timeout 10m npm run build; ( flock -w 10 9 || exit 1 echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock if [ -f artisan ]; then $FORGE_PHP artisan migrate --force fi
优先推荐方案1,从项目层面解决进程不退出问题,更稳定可靠。
内容的提问来源于stack exchange,提问作者A-Bop
相关产品推荐
相关产品推荐

