
当在 Docker 环境或直接运行 remix-serve 时,因 Node.js ESM 模块系统不支持目录导入(如 /app/build),导致启动失败;正确做法是显式指定入口文件路径 ./build/index.js。
当在 docker 环境或直接运行 `remix-serve` 时,因 node.js esm 模块系统不支持目录导入(如 `/app/build`),导致启动失败;正确做法是显式指定入口文件路径 `./build/index.js`。
在 Remix 应用构建完成后,build/ 目录下会生成多个产物文件(如 index.js、server.js、entry.server.js 等),其中 build/index.js 是 Remix 服务端渲染的主入口模块。然而,ESM(ECMAScript Modules)规范明确禁止直接导入一个目录(例如 import ... from './build'),必须指向具体文件。而旧版 @remix-run/serve 的 CLI 在解析参数时,若传入的是目录路径(如 build),会尝试以 ESM 方式加载该目录,从而触发错误:
Error: Directory import '/app/build' is not supported resolving ES modules
✅ 正确做法是显式指定 .js 入口文件:
# ✅ 推荐:明确指向 build/index.js npx remix-serve ./build/index.js # 或在 Dockerfile 中修正 CMD(原可能为:CMD ["npx", "remix-serve", "build"]) CMD ["npx", "remix-serve", "./build/index.js"]
⚠️ 注意事项:
- 不要省略
./前缀(确保被识别为相对路径,而非包名); - 确保
build/index.js文件存在——这要求你已成功执行过npm run build(或remix build); - 若使用自定义
server.js(如配合 Express),应改为./build/server.js,但需确认其导出符合 Remix Server Handler 规范; - Node.js 版本建议 ≥18.17.0(对 ESM 支持更稳定),并在
package.json中声明"type": "module"(Remix v2+ 默认启用 ESM)。
? 小结:该错误本质是 ESM 的路径解析限制,而非 Remix 或 Docker 配置缺陷。只需将模糊的目录引用升级为精确的文件路径,即可彻底规避。这一原则同样适用于其他基于 ESM 的工具链(如 Vite SSR、Astro adapter)。










