这是试图建立的东西了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环境兼容呢?
任何帮助将非常感激!!
老实说,任何东西比选择一个命令更复杂,我创建了一个bin文件夹,并添加自定义脚本文件,然后有非脚本的一个调用来代替。例如。:
"container_run": "./bin/container-run"
关键是,你不必是一个bash专家则因为你可以创建一个#该文件!在上面的/ usr / env的节点,然后写了休息的JavaScript。
一些更多的挖掘后,我发现了一个解决方案,他虽然我敢肯定,这可以改善。
您可以使用命令替换来运行$(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上测试过这个呢。
如果任何人有一个更好的主意/解决方案,请让我知道!