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

基于bash脚本实现NPM脚本条件执行的问题求助

解决npm prebuild脚本无法终止后续构建的问题

你的问题出在ask.sh的两处错误上:

  1. 输入y时误用了break命令——break仅用于跳出循环或switch分支,在无循环的脚本中执行会导致脚本以非零退出码终止,反而会让npm中断后续构建流程;
  2. 输入无效字符时,脚本默认以0退出码结束(最后一条echo命令的退出码为0),npm会判定prebuild执行成功,继续运行后续的build和postbuild脚本。

npm的核心规则是:如果pre前缀的脚本以非零退出码终止,会自动停止后续的主脚本和post脚本执行。我们只需要修正ask.sh的逻辑,让它在用户选择n时返回非零码,选择y时返回0码,无效输入时循环询问直到得到有效答复即可。

修改后的ask.sh代码

#!/bin/bash

while true; do
    read -p "Are you sure you want to build the app? (y/n) " yn
    case $yn in
        [yY]) 
            echo "Building the app..."
            exit 0  # 正常退出,npm继续执行后续脚本
            ;;
        [nN]) 
            echo "Exiting..."
            exit 1  # 非零退出,npm终止后续所有脚本
            ;;
        *) 
            echo "Invalid response, please enter y or n."
            ;;
    esac
done

修改说明

  • 添加while true循环,确保用户输入无效字符时会重复询问,直到得到y/n的有效答复;
  • 输入y时用exit 0明确返回正常退出码,告知npm可以继续执行后续构建流程;
  • 输入n时用exit 1返回错误退出码,触发npm终止后续所有脚本;
  • 移除了无效的break命令,避免脚本意外报错中断正常流程。

package.json配置无需修改

保持原有的脚本配置即可:

"scripts": {
    "prebuild": "./ask.sh",
    "build": "vite build",
    "postbuild": "./anotherBashScript.sh"
  },

内容的提问来源于stack exchange,提问作者Youssef Zidan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:15:52