You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在部署脚本中强制退出完成后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:29