AdonisJS v5 Docker运行报错缺少pino-pretty模块如何解决
问题根因
AdonisJS v5 内置的日志组件基于Pino实现,默认开发环境会开启pino-pretty格式化日志输出,该依赖默认被标记为dev依赖。你本地开发时安装了全部依赖所以运行正常,Docker构建时通常只会安装生产依赖、且运行环境会设置NODE_ENV=production,如果日志配置还强制开启pretty打印就会触发依赖缺失报错。
解决方案
方案1(生产环境推荐):关闭生产环境pretty日志
生产环境不需要人类易读的格式化日志,JSON格式的原始日志更适合日志采集、分析系统处理,直接修改日志配置即可:
- 打开项目下
config/logger.ts文件 - 修改
prettyPrint配置项,仅开发环境开启:
import { LoggerConfig } from '@ioc:Adonis/Core/Logger' const loggerConfig: LoggerConfig = { name: Env.get('APP_NAME'), enabled: true, level: Env.get('LOG_LEVEL', 'info'), // 仅开发环境启用pretty打印 prettyPrint: Env.get('NODE_ENV') === 'development', } export default loggerConfig
修改后重新构建Docker镜像即可解决问题。
方案2(特殊场景使用):将pino-pretty加入生产依赖
如果你确实需要在Docker运行环境输出格式化日志,可以直接将该依赖安装为生产依赖:
npm install pino-pretty --save # 或yarn add pino-pretty
重新构建镜像即可。
方案3(开发环境Docker使用):安装全部依赖
如果你的Docker是用于本地开发而非生产部署,检查Dockerfile中的依赖安装命令,移除生产安装参数:
将类似npm ci --only=production的命令改为npm ci,会同时安装dev依赖,包含pino-pretty。
内容的提问来源于stack exchange,提问作者sokida
相关产品推荐
相关产品推荐

