如何在npm中运行知道退出代码的post脚本

如何在npm中运行知道退出代码的post脚本,npm,Npm,我想在NPM run中运行一个post脚本,它将知道脚本是否失败 现在,post脚本的行为是,如果主脚本成功,它将运行。这样我就可以在成功时做些事了 但是,我还希望在出现故障时运行脚本。我该怎么做?我也在寻找这个问题的答案,我能做的最好的事情就是使用bash脚本始终运行post命令。这是我的npmbash #!/usr/bin/env bash # # Use this to catch control-c and cleanup. Won't run on Windows except in

我想在
NPM run
中运行一个post脚本,它将知道脚本是否失败

现在,post脚本的行为是,如果主脚本成功,它将运行。这样我就可以在成功时做些事了


但是,我还希望在出现故障时运行脚本
。我该怎么做?

我也在寻找这个问题的答案,我能做的最好的事情就是使用bash脚本始终运行post命令。这是我的
npmbash

#!/usr/bin/env bash
#
# Use this to catch control-c and cleanup.  Won't run on Windows except in git bash or similar.
#
# Pass args you'd normally pass to npm - eg. npm run dev
#   - if the args contain 'dev' or 'test' then the mongodb will be started up and shut down 
#   after it completes or control-c is pressed.

isDevOrTest=false

setIsDevOrTest() {
    for i in "$@";
    do
        if [[ $i =~ "dev|test" ]] 
        then
            echo "has dev or test"
            isDevOrTest=true
        fi
    done
}

# Trap control-c
trap 'ctrl_c' INT

function ctrl_c() {
    shutdown
    exit 0
}

function shutdown() {
    echo shutdown isDevOrTest: $isDevOrTest
    if [[ $isDevOrTest ]]
    then
        echo Its dev or test so shut down mongo
        mongo admin --eval 'db.shutdownServer()'
    fi
}

function startup() {
    echo startup
}

function run() {
    echo npm "$@"
    npm "$@"
}

setIsDevOrTest "$@"
startup
run "$@"
shutdown
为了帮助在
npm
中保留尽可能多的内容,您可以执行定义为在主脚本之后运行的post脚本(例如
poststart
start
):

但是,如果成功,您需要确保只运行postscript一次(例如,
npm中默认情况下,
poststart
start
之后运行,类似地,
prestart
在它之前运行)。应该简单到:

function shutdown() {
    if [[ "$?" != "0" ]]
    then
        # Only run if previous command was not successful
        npm run poststart
    fi
}
运行时使用:

npmbash run dev
npmbash run dev