Q&A
現在Dockerを使用してReact.jsの環境構築をしています。
dockerでReact環境を構築をベースに環境構築し、問題なく動作することは確認できました。
しかし自作のエイリアス(以降エイリアス)を使用してライブラリをインストールしようとしたところ、予期せぬ場所にpackage.json
やライブラリ
が作成・保存されます。
エイリアスを使用せずにコマンドを直打ちすると期待通りの動作をします。
エイリアスを使用してdocker composeコマンドと同等の実行結果になってほしいのですが何が間違っているのかが分かりません。
わかる方がいらっしゃいましたらアドバイスいただきますようよろしくお願いいたします。
動作環境
下記をDocker環境で動作させています。
TypeScriptは使用していません。
OS | mac |
react | react@18.2.0 |
Docker | 20.10.23, build 7155243 |
ディレクトリ構造は以下になります。
bash
1. 2├── Dockerfile 3├── Makefile 4├── README.md 5├── docker-compose.yml 6├── front # reactjsプロジェクト 7├── node_modules 8└── sc # エイリアスが記述してあるファイル
期待する動作
シェルスクリプトで書いたエイリアスのコマンドがdocker-composeコマンドと同じように動作すること。
具体的には
docker compose run --rm front sh -c "cd front && npm install"
を実行するとfront
ディレクトリ直下にあるpackage.json
、package-lock.json
、に変更が反映されること。
発生している問題
以下のコマンドを実行するとルートプロジェクト直下にpackage.json
、package-lock.json
、node_modules
が作成されてしまう。
bash
1sc npm install
sc npm install <libraries>
を実行して上記の期待する動作と同じ動作・実行結果になってほしい。
該当するコード
docker-compose.yml (1/ 2)
docker
1version: '3.9' 2services: 3 front: 4 build: 5 context: . 6 dockerfile: Dockerfile 7 command: sh -c "cd front && npm start" 8 environment: 9 - NODE_ENV=development 10 ports: 11 - 3000:3000 12 stdin_open: true 13 tty: true 14 volumes: 15 - ./:/usr/src/app 16 - node-modules:/usr/src/app/node_modules:cached 17 18volumes: 19 node-modules:
sc(2/2)
bash
1#!/bin/bash 2 3dc="docker compose" 4 5rm="--rm" 6 7app="front" 8 9# define container name 10app_container="${app_name}-${app}-1" 11 12invoke_run() { 13 $dc run $rm $* 14} 15 16run_app() { 17 invoke_run $app $* 18} 19 20run_npm() { 21 run_app sh -c "cd front && npm $*" 22} 23 24cmd=$1 25shift 26case "$cmd" in 27npm) 28 run_npm $* 29 ;; 30up) 31 # compose_up $* && compose_ps && exit 0 32 compose_up $* && exit 0 33 ;; 34*) 35 read -d '' help <<-EOF 36Usage: $0 command 37
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。