提问人:rshehi 提问时间:11/5/2023 更新时间:11/5/2023 访问量:42
为什么使用 NestJS 配置 TypeORM CLI 时不读取特定于环境的文件?
Why environment specific file is not read when configuring TypeORM CLI with NestJS?
问:
我正在尝试使用 NestJS 设置 TypeORM 迁移。我创建了特定于环境的文件;但是,每当我尝试指定确切的文件以从返回中读取变量时。应用程序已 dockerized。.env.development
process.env.NODE_ENV
undefined
Dockerfile.development
:
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "run", "start:dev" ]
docker-compose.development.yml
:
version: "3"
services:
nest-api:
container_name: clean-architecture-api
build:
context: .
dockerfile: Dockerfile.development
ports:
- 3000:3000
depends_on:
- db
env_file:
- .env.development
volumes:
- .:/app
- /app/node_modules
db:
image: postgres:14.1
restart: always
container_name: clean-architecture-db
ports:
- 5432:5432
env_file:
- .env.development
volumes:
- postgres:/var/lib/postgresql/data
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4:6.4
restart: always
ports:
- 8080:80
volumes:
- /data/pgadmin:/root/.pgadmin
env_file:
- .env.development
# environment:
# PGADMIN_DEFAULT_EMAIL: [email protected]
# PGADMIN_DEFAULT_PASSWORD: root
volumes:
postgres:
name: clean-architecture-db
.env.development
POSTGRES_USER=admin
POSTGRES_PASSWORD=admin
POSTGRES_DB=nestjs
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
SERVER_PORT=3000
typeOrm.config.ts
- 这里返回 undefinedprocess.env.NODE_ENV
import { DataSource } from 'typeorm';
import { ConfigService } from '@nestjs/config';
import { config } from 'dotenv';
config({ path: `.env.${process.env.NODE_ENV}` });
const configService = new ConfigService();
export default new DataSource({
type: 'postgres',
host: configService.get('POSTGRES_HOST'),
port: configService.get('POSTGRES_PORT'),
username: configService.get('POSTGRES_USER'),
password: configService.get('POSTGRES_PASSWORD'),
database: configService.get('POSTGRES_DB'),
entities: [],
});
package.json
脚本:
"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": "ts-node ./node_modules/typeorm/cli",
"typeorm:run-migrations": "npm run typeorm migration:run -- -d ./src/config/typeOrm.config.ts",
"typeorm:generate-migration": "npm run typeorm -- -d .src/config/typeOrm.config.ts migration:generate ./src/migrations/$npm_config_name",
"typeorm:create-migration": "npm run typeorm -- migration:create ./src/migrations/$npm_config_name"
为什么会这样?
我尝试仅使用 .env 文件,它工作正常。我还尝试使用cross-env来传递变量,但这也没有用
答:
0赞
Jay McDoniel
11/5/2023
#1
NODE_ENV
默认情况下,未设置。你的文件中没有,所以当你阅读它时,它是未定义的。若要确保已设置,请将其添加到服务或向服务添加密钥NODE_ENV
.env.development
process.env.NODE_ENV
NODE_ENV
.env.development
environment
nest-api
评论
0赞
rshehi
11/5/2023
我确实添加了;但是,值仍未定义。向服务添加密钥是什么意思?NODE_ENV
.env.development
environment
nest-api
0赞
Jay McDoniel
11/5/2023
docker compose 服务可以使用环境键显式设置环境
变量。因此,您可以执行类似(正确格式化为 yml)之类的操作,并以这种方式设置值environment: NODE_ENV: development
0赞
rshehi
11/5/2023
我更新了docker-compose的代码,但仍然值未定义
0赞
rshehi
11/5/2023
#2
我想通了 - 需要像这样在package.json中指定 CLI 命令:
"typeorm:dev": "NODE_ENV=development ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
"migration:generate:dev": "npm run typeorm:dev -- -d ./type-orm.config.ts migration:generate ./src/migrations/$npm_config_name"
上一个:生成包元数据时遇到错误
评论