[英]How to use npm install with docker? Installing node_modules without installing 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.