NestJS中不同环境的切换
比如在开发环境下连接开发环境数据库,生产环境下连接生产环境的数据库。
1.安装cross-env模块
npm i cross-env
2.在package.json中写入响应的环境变量
"scripts": {
"build": "cross-env NODE_ENV=production nest build --webpack",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:debug": "cross-env NODE_ENV=development nest start --debug --watch",
"start:prod": "cross-env NO_COLOR=true NODE_ENV=production node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
3.安装@nestjs/config
npm i --save @nestjs/config
4.新建env文件
//在项目根目录下新建文件
//.env 优先级最低 可以被覆盖 在线上环境可能需要
//.env.development 开发环境下的数据库或者别的配置
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=123456
DATABASE_NAME=wxdb
//.env.production 生产环境下的配置 如果线下不需要连接生产环境则不需要建
DATABASE_HOST=123.123.12.32
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=XTEdYNSWDTp6KaX4125478LLkk
DATABASE_NAME=wxdb
5.app.module.ts 里面导入不同环境的配置
import { ConfigService, ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], //根据环境变量加载响应配置文件
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DATABASE_HOST'),
port: configService.get<number>('DATABASE_PORT'),
username: configService.get<string>('DATABASE_USER'),
password: configService.get<string>('DATABASE_PASSWORD'),
database: configService.get<string>('DATABASE_NAME'),
entities: [sysRole, sysJurisdiction],
synchronize: true, // 不要在生产环境中使用 synchronize
logging: false, // 打印sql
}),
inject: [ConfigService],
}),
SystemModule,
ToolsModule,
]
})
export class AppModule {}