2017-08-26 38 views
1

我有一個在Docker上運行的React NodeJS項目。我可以通過發表文章here來使它工作。雖然項目位於碼頭集裝箱上,但在我的IDE上具有Linting功能

問題是,我的主機中的我的node_modules是空的。將volumes更改爲/www/project/node_modules:app/node_modules將使模塊在泊塢亭容器中不可用。

我的解決方法是通過運行npm install --only=dev只安裝在主機上的依賴關係,但每次重新啓動容器時都會消失。

這是我的Github回購的副本,這樣做。

回答

1

所以這裏有幾件事,你需要偏離那篇文章。由於該文章使用匿名音量爲node_modules。在你的情況下,你還希望devDepencies也來到你的主機,這樣你就可以使用它們。

現在,節點將不允許兩個不同的文件夾進行依賴關係,直到您使用requirejs模塊並在其中配置多個源。因此,對於您的開發圖像,您想要的是yarn不在Dockerfile內部運行。相反,當容器開始

所以我將改變Dockerfile作爲

FROM node:7.10.1 

ENV HOME=/home/app 
COPY package.json $HOME/react/ 
COPY scripts $HOME/react/scripts/ 
RUN npm install yarn -g 
WORKDIR $HOME/react 
ENV NODE_PATH=/home/node_modules 
VOLUME $NODE_PATH 
CMD yarn start:dev 

然後,如果你做的docker-compose upnode_modules空更新docker-compose.yml

react: 
    build: . 
    ports: 
    - 3100:3100 
    volumes: 
    - .:/home/app/react 
    - ./node_modules:/home/node_modules 

現在運行。所以每當你要刷新包

docker-compose run react yarn 
docker-compose up -d 

使用NODE_PATH我們改變的node_modules的位置/home/node_modules容器內,你應該做的事情。然後在docker-compose我們將其映射到主機上的./node_modules。所以我們的第一個docker-compose run react yarn,將填充這個文件夾與所有的依賴關係。

從您下次再運行docker-compose up。任何時候你想更新依賴關係,你要麼在react容器中運行「yarn」,要麼你只需再次運行docker-compose run ...命令

+0

這太棒了! –