Docker容器中运行Vite时遭遇ERR_MODULE_NOT_FOUND错误的解决方案咨询
我目前正在将网站迁移到Vite + React技术栈,网站采用Docker进行容器化部署,但在容器内运行Vite时遇到了模块找不到的错误,具体报错信息如下:
node:internal/modules/esm/resolve:274
throw new ERR_MODULE_NOT_FOUND(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/root/site/frontend/node_modules/rollup/parseAst' imported from /root/site/frontend/node_modules/vite/dist/node/chunks/dep-CXCa-anf.js
at finalizeResolution (node:internal/modules/esm/resolve:274:11)
at moduleResolve (node:internal/modules/esm/resolve:859:10)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)
{
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///root/site/frontend/node_modules/rollup/parseAst'
}
Node.js v24.3.0
需要说明的是,我已经在容器内执行过npm install,因此可以排除系统/架构不匹配的问题。
我已尝试的解决方法
- 反复确认路径
/root/site/frontend/node_modules/rollup/dist/parseAst.js下,rollup/parseAst确实存在 - 在我的macOS本地主机上,Vite可以完美开箱即用,没有任何问题
- 看到过相关的解决方案,但由于我无法修改第三方库的代码,无法通过修改文件扩展名来解决问题
- 尝试过使用npm的
--es-module-specifier-resolution=node参数,就像某篇回答中提到的那样,但npx现在移除了--node-arg和-n参数,无法将该参数传递进去
我的疑问
我该如何解决这个错误?或者说,有没有办法把--es-module-specifier-resolution=node参数传递给npx?
相关文件内容
Dockerfile
FROM node:24 COPY frontend /root/site/frontend COPY frontend/vite/vite.config.ts /root/site/frontend/vite.config.ts WORKDIR /root/site/frontend RUN npx tsc ENTRYPOINT exec npx \ vite \ --port 8002 \ --strictPort \ --open false
注:关于npm install的疑问——node_modules是作为卷挂载到容器中的,依赖包是在另一个构建容器中安装完成的。
package.json
{ "name": "toolbox-io-frontend", "version": "1.0.0", "private": true, "type": "module", "scripts": { // 这里包含很多脚本内容... }, "dependencies": { "@highlightjs/cdn-assets": "^11.11.1", "highlight.js": "^11.11.1", "marked": "^16.0.0", "react": "^19.1.0", "react-dom": "^19.1.0" }, "devDependencies": { "@types/jquery": "^3.5.32", "@eslint/js": "^9.29.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.5.2", "eslint": "^9.29.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.2.0", "typescript": "~5.8.3", "typescript-eslint": "^8.34.1", "vite": "^7.0.0" } }
内容来源于stack exchange

