Node.js 带Docker Compose的Monorepo,重新加载依赖项
我有以下Docker Compose配置:Node.js 带Docker Compose的Monorepo,重新加载依赖项,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,我有以下Docker Compose配置: foo-service: build: context: ./services/foo args: - NPM_TOKEN=${NPM_TOKEN} volumes: - ./services/foo/:/app - ./node_modules:/app/node_modules working_dir: /app command: sh -c "yarn
foo-service:
build:
context: ./services/foo
args:
- NPM_TOKEN=${NPM_TOKEN}
volumes:
- ./services/foo/:/app
- ./node_modules:/app/node_modules
working_dir: /app
command: sh -c "yarn dev"
ports:
- 8088:8088
environment:
- NODE_ENV=development
- PORT=8088
与关联的Dockerfile(在/services/foo中)
以及纱线开发
cmd:
“dev”:“npx nodemon lib/”
(我使用TS在每个服务目录中从/src
编译到/lib
我和莱娜一起使用纱线工作区
当我运行docker compose up--build时,一切都会正常运转、安装和运行
TS在更改时正确编译文件,然后由Nodemon拾取并在Docker容器内重新启动节点进程(通过Docker compose)
但是,如果我更改foo service
的依赖项,Docker容器的节点进程不仅不会重新启动,而且如果我重新启动整个容器,这些更改不会被拾取
我(天真的)猜测:
当Docker Compose第一次运行时,它会在每个服务中拾取package.json并安装依赖项。但是,当nodemon拾取更改时,它会重新启动Docker容器节点进程,但我猜不会重新安装依赖项。我如何让Docker容器拾取更改的内容并进行符号链接(Thread workspaces/lerna)、dep并重新启动节点进程?(另外,我显然没有在每次代码更改时将包发布到npm,因此Docker容器在package.json中包含的包版本将指向在npm上发布的相同版本,而不是本地更改的dep)
我绝对不应该也不想在docker内部代码更改时重新安装npm的所有DEP。您找到解决方案了吗?您找到解决方案了吗?
FROM node:10.16.0-alpine
ARG NPM_TOKEN
ENV NPM_TOKEN="${NPM_TOKEN}"
COPY package.json .
COPY .npmrc .
RUN yarn
RUN rm -f .npmrc