繁体   English   中英

如何让 docker 和 npm 工作区正常工作,而无需到处复制根主节点模块

[英]How to get docker and npm workspaces to work fine without copying root master node_modules everywhere

我有一个像这样的项目结构:

+-- node_modules
+-- package-lock.json
+-- package.json
`-- workspace-a
   `-- package.json <---includes common as a dependency
`-- common
   `-- package.json

我有一个Dockerfile如下:

FROM node:alpine as builder

# from monorepo root
WORKDIR /app

COPY ./package*.json ./

COPY ./common/package*.json ./common/

COPY ./workspace-a/package*.json ./workspace-a/

RUN npm config set optional

RUN npm i

# build common library
WORKDIR /app/common

COPY ./common ./

RUN npm run build

# build workspace-a using built common library as dependency
WORKDIR /app/workspace-a

COPY ./auth ./

CMD ["npm","run", "build"]

FROM node:alpine
ENV CI=true

WORKDIR /app

COPY --from=builder /app/workspace-a/build .

COPY ./workspace-a/package*.json .

# RUN npm i --only=prod <--- this step will complain about "common" not being available, but added it just to try it

CMD ["npm","start"]

我想知道如何避免复制node_modules ,我认为这是一个包含所有依赖项的巨大合并文件夹,它消除了子模块拥有自己单独的node_modules文件夹的需要,并将其转移到将使用它的每个容器。 例如,我计划最终添加一个workspace-b ,它也将有自己的Dockerfile ,它或多或少与上面显示的workspace-a -a 相同。

如果您想停止复制node_modules文件夹

COPY ./common ./

然后你想要一个.dockerignore文件,其中包含 docker 应该忽略的目录,在这种情况下,该文件将只包括:

node_modules

有关信息,请参阅此页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM