我有一个在 docker 上运行的 React Node.js 项目。我能够按照文章 here 使其工作.
问题是我主机上的 node_modules
文件夹是空的。将 volumes
更改为 /www/project/node_modules:app/node_modules
将使模块在 docker 容器中不可用。
我使用的解决方法是通过运行 npm install --only=dev
在我的主机上只安装依赖项。但是,每次我重新启动容器时它们都会消失。
这是我的 Github 的副本这样做的 repo 协议(protocol)。
最佳答案
所以这里有一些东西,你需要偏离那篇文章。因为那篇文章为 node_modules
使用了匿名卷。在您的情况下,您希望 devDepencies 也进入您的主机,以便您可以使用它们。
现在 Node 将不允许依赖两个不同的文件夹,直到您使用 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.yml
react:
build: .
ports:
- 3100:3100
volumes:
- .:/home/app/react
- ./node_modules:/home/node_modules
现在,如果您执行 docker-compose up
,则 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 ...
命令
关于node.js - 尽管项目在 docker 容器上,但如何在我的 IDE 上提供 linting 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893555/