Node.js 带Docker Compose的Monorepo,重新加载依赖项

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

我有以下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 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