繁体   English   中英

将 docker 容器中的 node_modules 与主机同步

[英]Syncing node_modules in docker container with host machine

我想对我的反应应用程序进行 dockerize 处理,对此我有一个问题。 我想在容器上安装 node_modules 然后将它们同步到主机,这样我就可以在容器而不是主机上运行 npm 命令。 我实现了这一点,但是同步到我的计算机的 node_modules 文件夹是空的,但在容器中填充。 这是一个问题,因为我在 IDE 中收到未安装警告,因为主机中的 node_modules 文件夹是空的。

docker-compose.yml:

version: '3.9'

services:
  frontend:
    build:
      dockerfile: Dockerfile
      context: ./frontend
    volumes:
      - /usr/src/app/node_modules
      - ./frontend:/usr/src/app

Dockerfile:

FROM node:18-alpine3.15
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install && \
    mkdir -p node_modules/.cache && \
    chmod -R 777 node_modules/.cache
COPY ./ ./ 
CMD npm run start

我将不胜感激任何提示和/或帮助。

您不能像这样真正“共享” node_modules,因为在安装过程中会发生某些特定于操作系统的步骤。 某些模块具有需要针对主机的编译步骤。 其他模块具有符号链接的bin声明,并且符号链接不能在主机和容器之间“挂载”或共享。 即使是不同版本的 node 也无法在不重建的情况下共享 node_modules。

如果您想在 docker 内进行开发,您有两种选择:

  1. 使用 VSCode在容器内进行编辑(也许其他编辑器也这样做?)。 我以前试过这个,它不是很有趣,而且有点乏味——它不能按照你想要的方式工作。
  2. 编辑主机上安装在 docker 内的文件。 Nodemon/webpack/etc 将看到更改并相应地重建。

我推荐#2 - 我已经看到它在许多公司中使用,并且是一种非常“标准”的开发方式。 这确实需要您在主机上安装 npm - 不要因为试图避免额外的 npm 安装而陷入困境。

如果您想加快安装和构建速度,最好的办法是将 npm 缓存目录挂载到 docker 容器中。 您需要在主机和 docker 容器上找到 npm 缓存位置,方法是在两个地方运行npm get cache 您可以通过执行以下操作在 docker 容器上执行此操作:

docker run --rm -it <your_image> npm get cache

您将像安装任何其他卷一样安装缓存文件夹。 您可以在 docker 和您的主机上运行单独的安装 - 文件只会下载一次,所有编译和符号链接都将正确进行。

暂无
暂无

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

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