NodeJS/Express Docker项目中找不到已安装的express-validator模块
问题原因
你的问题本质是Docker镜像构建后,新安装的依赖没有同步到容器内部的node_modules目录:
- 你在宿主机执行
npm install添加express-validator等新依赖时,依赖只会安装到宿主机本地的node_modules中 - 你的docker-compose仅挂载了本地src目录到容器的
/app/src,容器内的node_modules是镜像构建阶段执行npm install生成的,仅包含构建镜像时已经存在于package.json中的依赖,后续新增的依赖不会自动同步到容器内 - 之前的依赖可以正常使用,是因为这些依赖在你第一次构建镜像时就已经被安装到容器内的
node_modules中
解决方案
有两种常用方案可选,根据你的开发习惯选择即可:
方案1:每次新增依赖后重新构建镜像
修改package.json添加新依赖后,执行以下命令重新构建服务镜像,再启动容器:
# 重新构建app服务镜像 docker-compose build app # 重启容器 docker-compose up -d
该方案的好处是镜像内容始终和你的依赖配置一致,避免本地环境和容器环境不一致的问题。
方案2:开发阶段直接在容器内安装依赖
如果不想每次新增依赖都重新构建镜像,可以直接在运行中的容器内执行安装命令:
# 进入容器安装新依赖 docker-compose exec app npm install express-validator
如果需要长期优化开发体验,也可以修改docker-compose的volumes配置,将本地的package.json和package-lock.json也挂载到容器内,后续只需要执行上述容器内安装命令即可同步依赖:
services: app: # 其他配置保持不变 volumes: - ./src:/app/src - ./package.json:/app/package.json - ./package-lock.json:/app/package-lock.json
内容的提问来源于stack exchange,提问作者Mr.H123
相关产品推荐
相关产品推荐

