You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS应用本地可正常运行 部署到EC2后启动报错如何解决?

可能原因及排查方案

核心原因优先级(匹配你提到的同实例其他分支正常、切分支仍报错的现象)

  • esm加载器缓存未清理
    你启动命令用了node -r esm加载esm模块,esm会默认在用户根目录生成.esm-cache缓存,也会在项目node_modules/.cache下生成缓存,切换分支时缓存不会自动更新,会导致加载旧版本的模块导出信息。
    排查修复:执行以下命令清理后重试
rm -rf ~/.esm-cache
rm -rf ./node_modules
rm -rf ./package-lock.json
npm i
npm start
  • 当前目录存在未被git跟踪的旧版本文件
    如果general/general.js被加入了.gitignore,或者切换分支前该文件有未提交的修改,git切换分支时不会覆盖该文件,导致你看到的分支代码是对的,但实际运行时加载的是旧版本的文件。
    排查修复:直接读取服务器上当前目录的目标文件内容,确认导出是否存在:
cat /home/ec2-user/reponame/general/general.js

如果内容确实不对,执行git checkout -- general/general.js强制覆盖本地修改即可。

  • 文件名/路径大小写不匹配
    EC2是Linux系统,文件系统大小写敏感,而本地Windows、macOS默认大小写不敏感。如果你的导入语句写的是import {randomFunction} from './General/General.js',但实际路径是./general/general.js,本地运行不会报错,但Linux下会加载失败或者加载到错误文件。
    排查修复:核对导入语句的路径大小写,和实际服务器上的文件、文件夹名大小写完全一致。

其他可能原因

  • Node版本/依赖版本不一致
    如果正常运行的分支用了nvm指定Node版本,当前目录没有执行对应版本切换,会导致ES模块解析规则不同。另外如果两个分支的esm依赖版本不同,也会出现导出解析异常。
    排查修复:分别在当前目录和正常分支目录执行node -v、npm list esm,对比版本是否一致,如果不一致统一版本即可。
  • 文件权限异常
    如果当前目录的general.js没有运行用户的读取权限,Node加载时会读取失败,也可能抛出导出不存在的异常。
    排查修复:执行ls -l /home/ec2-user/reponame/general/general.js核对权限,和正常分支的对应文件权限保持一致即可。

内容的提问来源于stack exchange,提问作者Terry Windwalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:48:04