这是我之前在尝试使用 npm 脚本进行设置时遇到的一个问题,但我一直无法解决它。甚至不确定这是否可行,最好我希望该解决方案能够在 Mac 和 Windows 环境中工作。
我试图将 npm 脚本的一些逻辑分成几个可以互相调用的短脚本。这与变量相结合将使脚本对于其他开发人员来说更好地可维护和可读。
但是我不知道如何在另一个 npm 脚本中使用一个 npm 脚本的结果。我几乎不是 bash 专家,所以我在这里寻求一些帮助(:
在此示例中,我尝试设置一个脚本,使开发人员可以轻松启动 docker(虚拟)环境。
在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": "???"
}
所以这里我有一个包含要运行的 docker 容器名称的变量:$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 环境中兼容的方式来完成吗?
任何帮助将不胜感激!!
最佳答案
经过更多的挖掘,我找到了他的一个解决方案,尽管我确信这可以改进。
您可以使用命令替换来运行$(npm run container_running)
,这将返回运行该命令(在子shell中)的所有输出。
然后您可以测试输出以检查最后一个单词是否为“true”。
"start": "if [[ $(npm run container_running) == *true ]]; then npm run container_stop && npm run container_run; else npm run container_run; fi"
尚未在 Windows 上对此进行测试。
如果有人有更好的想法/解决方案,请告诉我!
关于javascript - 如何根据另一个 npm 脚本的输出设置条件 npm 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237792/