部署NestJS到DigitalOcean遇sh:1:nest:not found错误的解决方案咨询
NestJS生产部署错误解决方案
第一个应用:临时方案的合理性
你的scripts配置中,start:prod是直接运行编译后的JS文件,不需要Nest CLI,但build阶段必须依赖Nest CLI。生产环境部署时如果执行npm install --production,devDependencies中的包不会被安装,因此执行nest build会出现命令找不到的错误。
把@nestjs/cli移到dependencies确实能解决当前问题,属于临时可行的方案,但不推荐长期使用——CLI是开发工具,生产环境完全不需要,这样做会增加部署包体积,也不符合依赖分类的最佳实践。
第二个大型应用:正确解决方案
问题根源
sh: 1: nest: not found错误:生产环境安装依赖时跳过了devDependencies,构建阶段找不到Nest CLI。Cannot find namespace 'Express'错误:合并的代码引入了Express相关类型,但@types/express未正确安装,或依赖缓存导致类型未被识别。
正确解决步骤
保持
@nestjs/cli在devDependencies,调整部署流程:- 部署时先执行
npm install(安装所有依赖,包括devDependencies),再执行npm run build完成编译,最后执行npm install --production移除devDependencies,减小生产包体积。 - 若用CI/CD工具,可在构建阶段安装全量依赖,编译完成后仅将
dist目录、package.json和锁文件推送到服务器,再在服务器执行npm install --production。
- 部署时先执行
修复Express类型缺失问题:
- 安装Express类型包:
npm install @types/express --save-dev(类型包通常放在devDependencies)。 - 检查
tsconfig.json,确保compilerOptions.types包含express:{ "compilerOptions": { "types": ["express"] } } - 清理依赖缓存后重新安装:
rm -rf node_modules package-lock.json && npm install,避免缓存导致的依赖异常。
- 安装Express类型包:
不推荐的做法
- 将NODE_ENV设为development部署生产环境:这会让NestJS运行在开发模式,禁用性能优化、启用热重载,还可能暴露调试信息,存在安全和性能风险。
- 长期将
@nestjs/cli留在dependencies:违背依赖分类规范,增加生产包冗余体积。
内容的提问来源于stack exchange,提问作者Korer
相关产品推荐
相关产品推荐

