React-Vite Docker容器启动失败,报three-stdlib eval使用警告
问题分析与解决
容器停止的核心原因
你的package.json中start脚本配置的是vite build——这只是构建命令,执行完构建后进程会直接退出,所以容器启动后完成构建就立刻停止了。这个问题和日志里的eval警告无关。
解决方案步骤
1. 修正启动逻辑,让容器持续运行
有两种可选方案:
方案一:用Vite预览服务(适合开发/测试场景)
修改package.json的start脚本为vite preview:
"scripts": { "dev": "vite", "build": "vite build", "start": "vite preview", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }
方案二:用静态服务器运行构建产物(适合生产环境)
修改Dockerfile,使用轻量静态服务器serve运行构建好的dist文件:
FROM node:latest AS builder WORKDIR /src COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 切换到生产环境镜像,安装静态服务器 FROM node:latest WORKDIR /app COPY --from=builder /src/dist ./dist RUN npm install -g serve EXPOSE 3000 CMD ["serve", "-s", "dist", "-l", "3000"]
2. 处理eval警告
日志中的警告来自three-stdlib的依赖代码,不属于业务代码问题。如果要消除这个警告,可以在vite.config.js中添加配置允许依赖中的eval:
import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; export default defineConfig({ plugins: [react()], build: { chunkSizeWarningLimit: 1600, rollupOptions: { plugins: [ { name: 'allow-eval', transform(code, id) { if (id.includes('three-stdlib/libs/lottie.js')) { return code; } } } ] } }, preview: { port: 3000, strictPort: true, }, server: { port: 3000, strictPort: true, host: true, }, });
如果不在意这个警告,完全可以忽略它,不会影响项目构建和运行。
内容的提问来源于stack exchange,提问作者Shon22
相关产品推荐
相关产品推荐

