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

配置NestJS+TypeORM CLI时环境特定文件无法读取的原因

问题原因分析
  1. 迁移脚本未传递NODE_ENV:执行TypeORM迁移命令时,package.json中的迁移相关脚本没有设置NODE_ENV环境变量,导致typeOrm.config.ts里的process.env.NODE_ENV返回undefined,无法正确加载.env.development文件。
  2. 容器环境变量作用范围有限:docker-compose.development.yml中给nest-api服务配置的env_file仅对容器启动时的start:dev命令生效,单独执行迁移命令时不会自动继承这些环境变量。
解决方案

方案一:修改package.json脚本,显式传递NODE_ENV

更新package.json中的TypeORM相关脚本,明确指定NODE_ENV:

"scripts": {
  "start:dev": "NODE_ENV=development nest start --watch",
  "start:debug": "NODE_ENV=development nest start --debug --watch",
  "start:prod": "NODE_ENV=production node dist/main",
  "typeorm:dev": "NODE_ENV=development ts-node ./node_modules/typeorm/cli",
  "typeorm:run-migrations:dev": "npm run typeorm:dev migration:run -- -d ./src/config/typeOrm.config.ts",
  "typeorm:generate-migration:dev": "npm run typeorm:dev -- -d ./src/config/typeOrm.config.ts migration:generate ./src/migrations/$npm_config_name",
  "typeorm:create-migration": "npm run typeorm:dev -- migration:create ./src/migrations/$npm_config_name"
}

之后执行迁移时使用npm run typeorm:run-migrations:dev即可。

方案二:在Docker容器内执行迁移

如果需要在容器内运行迁移命令,可按以下步骤操作:

  1. 启动容器(确保数据库服务正常运行):
docker-compose -f docker-compose.development.yml up -d
  1. 进入nest-api容器并执行迁移,同时传递NODE_ENV:
docker exec -e NODE_ENV=development clean-architecture-api npm run typeorm:run-migrations

或者直接修改docker-compose.development.yml,给nest-api服务添加固定环境变量:

services:
  nest-api:
    # 其他配置保持不变
    environment:
      - NODE_ENV=development

这样容器内执行任何命令时都会自动带上NODE_ENV=development。

额外注意事项

  • .env.development中的POSTGRES_HOST需要改为db(对应docker-compose中数据库服务的名称),容器内无法通过localhost访问数据库服务。
  • typeOrm.config.ts的entities数组需补充实体路径,否则迁移无法识别实体:
entities: ['src/**/*.entity.ts'],
// 生产环境可改为
// entities: ['dist/**/*.entity.js'],

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:41:24