在DigitalOcean Droplet部署Express服务器时遇apollo-server-express找不到错误
解决DigitalOcean Droplet上ESM模式下apollo-server-express模块找不到的问题
以下是针对该问题的具体排查和解决步骤:
- 检查Node.js版本一致性
本地与服务器的Node版本差异可能导致模块解析逻辑异常。执行node -v对比两端版本,若不一致,用nvm统一版本:
# 安装对应版本(替换为你的本地Node版本号) nvm install 16.18.0 # 切换到该版本 nvm use 16.18.0
- 修复node_modules权限问题
服务器上的目录权限可能限制Node读取模块文件,执行以下命令修复:
sudo chown -R $USER:$USER /root/ti4-automation/node_modules # 验证权限是否正常 ls -ld /root/ti4-automation/node_modules/apollo-server-express
确保输出中的文件所有者为当前登录用户。
- 调整nodemon的ESM支持配置
旧版nodemon对ESM的支持存在缺陷,先更新nodemon到最新版:
npm install nodemon@latest --save-dev
再修改package.json中的启动脚本,明确指定ESM解析策略:
"startServer": "nodemon --experimental-specifier-resolution=node ./server/index.js"
- 强制清除缓存并重装依赖
可能存在依赖缓存损坏的情况,执行以下步骤彻底重装:
npm cache clean --force rm -rf node_modules package-lock.json npm install
- 临时测试绝对路径导入
将index.js中的导入语句改为绝对路径,验证模块是否能被正常读取:
import { ApolloServer } from '/root/ti4-automation/node_modules/apollo-server-express/index.js'
若此方式可行,说明项目的ESM解析配置存在问题,需检查项目根目录package.json的位置是否正确,或Node的模块解析策略是否有特殊配置。
内容的提问来源于stack exchange,提问作者Peter Boomsma
相关产品推荐
相关产品推荐

