如果 React 构建失败,则停止 bash 脚本

stop bash script if react build fails

我有几个部署中断了生产,因为如果构建失败,bash 脚本会继续。如果 npm run build 失败,我如何确保脚本退出?

#!/usr/bin/env bash
source .env
ENVIRONMENT="$REACT_APP_STAGE"
if [ "$ENVIRONMENT" != "production" ]; then
    echo "improper .env NODE_ENV"
    exit
fi
git pull origin master
npm i
npm run build
rm -r /var/www/domain_name.dk/html/*
mv /var/www/domain_name.dk/website/build/* /var/www/domain_name.dk/html/

$? 运算符获取先前 运行 命令的 return 代码。因此,您可以将它与 if 语句结合使用来验证 npm run build 是否成功完成。

#!/usr/bin/env bash
source .env
ENVIRONMENT="$REACT_APP_STAGE"
if [ "$ENVIRONMENT" != "production" ]; then
    echo "improper .env NODE_ENV"
    exit
fi
git pull origin master
npm i
npm run build
if [ $? -eq 0 ]; then
  echo "npm run build successful"
else
  echo "npm run build failed" >&2
  exit 1
fi
rm -r /var/www/domain_name.dk/html/*
mv /var/www/domain_name.dk/website/build/* /var/www/domain_name.dk/html/

出乎意料的简单:

#!/usr/bin/env bash
source .env
ENVIRONMENT="$REACT_APP_STAGE"
if [ "$ENVIRONMENT" != "production" ]; then
    echo "improper .env NODE_ENV" >&2  # Errors belong on stderr
    exit 1
fi
git pull origin master
npm i
npm run build || exit  # Exit if npm run build fails
...

通过使用短路运算符||,如果npn run build失败,则执行右侧的命令。 exit returns 最后执行的命令的退出状态,因此脚本将以与 npn run build 相同的失败代码退出。如果 npm run build 成功,则 exit 不会执行。