Docker部署ViteJS报错:无法找到模块npm run install
问题:Docker Compose部署ViteJS项目时出现“无法找到模块npm run install”错误
尝试通过Docker Compose部署ViteJS项目,将本地项目目录挂载到容器以实现热更新,但执行docker compose up命令时出现“无法找到模块npm run install”的错误。
原配置文件
Dockerfile
FROM node WORKDIR /app COPY package*.json . RUN npm install COPY . . CMD npm run dev EXPOSE 4000 ENV NODE_ENV development
docker-compose.yml
version: '3.8' services: app: build: . container_name: train_vite working_dir: /app/ ports: - "4000:4000" volumes: - ./:/var/www/html/app command: - npm run install - npm run dev environment: NODE_ENV: development
vite.config.ts
import { defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], server:{watch:{ usePolling:true, }, host:true, strictPort:true, port:4000 } })
错误原因
- 命令错误:
npm run install是无效命令,正确的依赖安装命令是npm install,不需要run前缀。 - 挂载路径不匹配:Dockerfile中设置的工作目录是
/app,但docker-compose.yml将本地目录挂载到/var/www/html/app,导致容器内工作目录与挂载目录不一致,原本构建阶段安装的依赖会被本地挂载目录覆盖,同时命令执行路径错误。 - 多命令执行方式错误:用数组形式写
command时,每个元素是命令的拆分参数,而非独立命令。若要执行多个命令,需通过shell串联。
修正方案
修正后的docker-compose.yml
version: '3.8' services: app: build: . container_name: train_vite working_dir: /app/ ports: - "4000:4000" volumes: # 挂载本地目录到容器工作目录,保持路径一致 - ./:/app # 排除本地node_modules,避免覆盖容器内的依赖(可选但推荐) - /app/node_modules # 用shell串联命令,先安装依赖再启动开发服务 command: sh -c "npm install && npm run dev" environment: NODE_ENV: development
额外说明
- 添加
/app/node_modules到volumes可避免本地node_modules覆盖容器内的依赖,确保容器使用适配容器环境的依赖包; - vite.config.ts中已开启
usePolling: true,这是挂载本地目录实现热更新的必要配置,无需修改; - 若本地无
node_modules目录,容器启动时会自动执行npm install安装依赖,挂载后本地也会同步生成该目录(不需要本地生成可忽略此挂载排除)。
内容的提问来源于stack exchange,提问作者alan nungaray
相关产品推荐
相关产品推荐

