Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I have linting features available on my IDE despite the project being on a docker container?

I have a React Node.js project running on docker. I was able to make it work by following the article here.

The problem is that node_modules folder on my host machine is empty. Changing the volumes to /www/project/node_modules:app/node_modules will render the modules unavailable in the docker container.

The workaround that I'm using is to install only the dependencies on my host machine by running npm install --only=dev. However, they disappear every time I restart the container.

Here is a copy of my Github repo that does this.

like image 657
Mr A Avatar asked Aug 26 '17 08:08

Mr A


1 Answers

So there are few things here, you need to deviate from that article. Because that articles uses anonymous volume for the node_modules. In your case you want the devDepencies to come to your host also, so you can use them.

Now Node will not allow two different folders for dependencies until your use requirejs module and configure multiple sources in that. So for your development image what you want is that yarn is not run inside the Dockerfile. Instead it is run when the container starts

So I will change the Dockerfile as

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

Then update docker-compose.yml

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

Now if you do docker-compose up the node_modules is empty. So what you should do whenever you want to refresh the packages

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

Using NODE_PATH we changed the location of node_modules to /home/node_modules inside the container. Then in docker-compose we mapped the same to ./node_modules on host. So our first docker-compose run react yarn, will fill this folder with all the dependencies.

From next time you just run docker-compose up. Any time you want to update dependencies you either run "yarn" inside the react container or you just run the docker-compose run ... command again

like image 54
Tarun Lalwani Avatar answered Oct 15 '22 18:10

Tarun Lalwani