方案一:env 配置文件
特点:不可以嵌套
一、安装和配置环境变量
- 在 nestjs 项目中安装依赖
npm install @nestjs/config cross-env -D --registry=https://registry.npmmirror.com
- 修改 package.json 脚本,指定环境区分变量
{
"start:dev": "cross-env NODE_ENV=development nest build --webpack --webpackPath webpack-hmr.config.js --watch",
"dev": "cross-env NODE_ENV=development nest build --webpack --webpackPath webpack-hmr.config.js --watch",
"start:prod": "cross-env NODE_ENV=production node dist/main",
"build": "cross-env NODE_ENV=production nest build",
}
- 创建 src/utils/env.ts,根据环境组合最终文件路径
const envFilePath = ['.env'];
if (process.env.NODE_ENV === 'development') {
envFilePath.unshift('.env.development');
}
if (process.env.NODE_ENV === 'production') {
envFilePath.unshift('.env.production');
}
export default envFilePath;
- 在 src/app.module.ts 中注册环境变量
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import envFilePath from '@/utils/env';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
- 公共环境变量配置,创建 .env
此文件变量优先级最低,合并后同名环境变量会被替换掉
NAME = nestjs
POSITION = env
- 创建开发环境变量配置,创建 .env.development
POSITION = env.development
API_URL = http://localhost:3000
- 创建生产环境变量配置,创建 .env.production
POSITION = env.production
API_URL = http://localhost:9000
二、测试
- 在 src/app.controller.ts 的路由中打印环境变量
import { Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('/datamanager/s/getCatalogTree')
getTree(): string {
console.log(process.env);
return this.appService.getCatalogTree();
}
@Post('/datamanager/s/postUserInfo')
create(): string {
return this.appService.createUserInfo();
}
}
- 启动开发服务
npm run dev
- 浏览器访问测试路由
http://localhost:3000/datamanager/s/getCatalogTree
- 控制台打印结果
... // 其他变量
NODE_ENV: 'development',
NAME: 'nestjs',
POSITION: 'env.development',
API_URL: 'http://localhost:3000'
方案二:json 配置文件
特点:可以嵌套
一、安装配置环境变量
- 在 nestjs 项目中安装依赖
npm install config cross-env -D --registry=https://registry.npmmirror.com
- 在根目录创建默认环境变量文件 /config/default.json
此配置文件优先级最低,最终会被合并覆盖
{
"server": {
"only_def": "def",
"name": "default",
"port": 3000
}
}
- 在根目录创建 开发 环境变量文件 /config/development.json
{
"server": {
"only_dev": "dev",
"name": "development",
"port": 3000,
"base_url": "/api"
}
}
- 在根目录创建 生产 环境变量文件 /config/production.json
{
"server": {
"only_prod": "prod"
}
}
- 修改 package.json
"scripts": {
"start:debug": "cross-env NODE_ENV=development start --debug --watch",
"start:prod": "cross-env NODE_ENV=production node dist/main",
},
二、测试
- 在 src/app.controller.ts 中
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import * as config from 'config';
@Controller('/api')
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('/user')
getHello(): string {
console.log('====================================');
console.log(config.get('server'));
console.log('====================================');
return this.appService.getHello();
}
}
- 查看开发环境变量
启动开发服务 npm run start:dev
打开浏览器输入 http://localhost:3000/api/user
// 在控制台查看打印结果,如下
====================================
{
only_def: 'def',
name: 'development',
port: 3000,
only_dev: 'dev',
base_url: '/api'
}
====================================
- 查看生产环境变量
启动开发服务 npm run start:prod
打开浏览器输入 http://localhost:3000/api/user
// 在控制台查看打印结果,如下
====================================
{ only_def: 'def', name: 'default', port: 3000, only_prod: 'prod' }
====================================