javascript - 如何根据另一个 npm 脚本的输出设置条件 npm 脚本?

标签 javascript bash npm npm-start npm-scripts

这是我之前在尝试使用 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/

相关文章:

node.js - 无法在 Windows 10 上使用 npm 安装 Bower

node.js - npm start 完全没有做任何事情

json - CoffeeScript 中的 package.json 和 bower.json?

javascript - 使用纯 javascript 查找和删除特定元素

javascript - 获取 <TD> 的内容并使用 jQuery/JS 对其进行相应的乘法/除法

javascript - 如何使Code Igniter ajax请求URL出现在浏览器URL中。

linux - Bash脚本选择文件时报错 "syntax error near unexpected token ' ('"

javascript - 将 CDN 与 NPM/Yarn 用于依赖项的优缺点是什么?

linux - 读取 shell 脚本时如何处理未找到的文件

php - redis-cli flushall 的 bash 命令是什么?