如何建立基于另一个输出条件NPM脚本?

问题描述 投票:0回答:2

这是试图建立的东西了NPM脚本时,我之前遇到的一个问题,但我一直没能解决这个问题。甚至不知道这是可能的,最好我想解决在Mac和Windows环境下工作。

我想我的一些NPM脚本的逻辑分割成几个短脚本,可以相互调用。这与变量的组合将使得脚本更好的维护和可读性为其他开发商。

我无法弄清楚如何然而在另一个使用一个NPM脚本的结果。我绝对不是一个bash专家,这样,为什么我在寻找一些帮助这里(:

在这个例子中,我试图建立一个脚本,它允许开发者轻松地推出一个泊坞窗(虚拟)环境。

在的package.json:

...
"config": {
    "docker": {
        "container": "docker-test"
    }
},
"scripts": {
    "container_run": "docker run -d -p 80:80 $npm_package_config_docker_container"
    "container_running": "docker inspect -f {{.State.Running}} $npm_package_config_docker_container || echo 'false'",
    "container_stop": "docker stop $npm_package_config_docker_container && docker rm $npm_package_config_docker_container",
    "start": "???"
}

所以在这里我必须要运行包含泊坞窗容器的名称一个变量:$npm_package_config_docker_container

当我做npm run container_running,这将返回true,如果容器运行,或者如果容器不存在在这种情况下,它会echo 'false'抛出一个错误。到现在为止还挺好。

现在我想的启动脚本如果运行检查容器,如果是停止容器并开始新的运行和未运行刚开始新的运行。因此,像这样:

"start": "if [ container_running == "true" ]; then container_stop && container_run; else container_run; fi"

所以,问题是如何实现这一目标?作为奖励的问题,可以这样的方式,在Mac和Windows环境兼容呢?

任何帮助将非常感激!!

javascript bash npm npm-start npm-scripts
2个回答
1
投票

老实说,任何东西比选择一个命令更复杂,我创建了一个bin文件夹,并添加自定义脚本文件,然后有非脚本的一个调用来代替。例如。:

"container_run": "./bin/container-run"

关键是,你不必是一个bash专家则因为你可以创建一个#该文件!在上面的/ usr / env的节点,然后写了休息的JavaScript。


0
投票

一些更多的挖掘后,我发现了一个解决方案,他虽然我敢肯定,这可以改善。

您可以使用命令替换来运行$(npm run container_running),这将返回所有的输出运行命令(子shell)。然后,你可以测试输出来检查,如果最后一个字是“真”。

"start": "if [[ $(npm run container_running) == *true ]]; then npm run container_stop && npm run container_run; else npm run container_run; fi"

有没有在Windows上测试过这个呢。

如果任何人有一个更好的主意/解决方案,请让我知道!

© www.soinside.com 2019 - 2024. All rights reserved.