これは、npm スクリプトを使用して何かをセットアップしようとしたときに以前に遭遇した問題ですが、解決できていません。これが可能かどうかさえわかりませんが、できればソリューションが Mac と Windows の両方の環境で動作することを望みます。
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 の両方の環境で互換性のある方法でこれを行うことができますか?
どんな助けでも大歓迎です!!