NestJS项目配置.env环境变量遇到的坑

本文讲述了在NestJS项目中使用.env文件设置环境变量遇到的问题,包括在Windows系统中的环境变量识别问题,以及如何通过cross-env包解决跨平台环境配置,最后提供了main.ts中正确加载不同环境env文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景说明

开始学习 NestJS 框架, 在使用 nest cli 通过 nest new project 命令创建了一个项目, 在链接数据库的时候, 有一些配置项想要使用 .env 文件设置环境变量在项目里使用.
像其他项目一样, 在根目录分别创建 .env.development .env.production 两个文件,
文件内容分别为:

# .env.development
DB_HOST=dev-db-server

# .env.production
DB_HOST=production-db-server

main.ts 里去导入使用:

import * as dotenv from 'dotenv';

dotenv.config();
console.log(process.env.DB_HOST);

这时, 打印为 undefined

解决

直接说结论:

  1. 确保安装了安装 dotenv
  2. 修改 package.json 里的配置项, 在 start:devstart:prod 命令里分别加上 NODE_ENV= + 环境名:
    "scripts": {
        "start:dev": "NODE_ENV=development nest start --watch",
        "start:prod": "NODE_ENV=production node dist/main"
    },
    
  3. 重启项目, 如果此时已经能按预期输出了, 那就恭喜你, 不用进行下面的操作了, 如果还不行, 继续下一步
  4. 不出意外这时候报错 'NODE_ENV' 不是内部或外部命令,也不是可运行的程序
    • 原因: 意味着在尝试执行 pnpm start:dev 命令时,系统无法识别 NODE_ENV 这个环境变量。这通常发生在 Windows 系统中,因为 Windows 的环境变量设置和 Unix/Linux 系统有所不同
    • 解决: 使用 cross-env 包来确保环境变量在所有平台上都能正确设置:
      pnpm add --save-dev cross-env
      # 或
      npm install --save-dev cross-env
      
  5. 安装好后, 再次修改 package.json 里的配置项, 在上一次修改的基础上, 分别在开头添加 cross-env
    "scripts": {
        "start:dev": "cross-env NODE_ENV=development nest start --watch",
        "start:prod": "cross-env NODE_ENV=production node dist/main"
    },
    
  6. 重新运行项目, 这时候环境变量打印的结果还是不理想(环境类型错乱 或 只读取.env 文件, 不读取对应环境类型), 可以在稍微改造一下 main.ts :
import * as dotenv from 'dotenv';

if (process.env.NODE_ENV === 'development') {
  dotenv.config({ path: '.env.development' }); // 加载开发环境 env 文件
} else if (process.env.NODE_ENV === 'production') {
  dotenv.config({ path: '.env.production' }); // 加载生产环境 env 文件
} else {
  dotenv.config(); // 加载默认的.env文件
}

console.log(process.env.NODE_ENV); // development
console.log(process.env.DB_HOST); // dev-db-server
  1. 大功告成, 继续愉快的开发吧!

各个包版本:

  "dependencies": {
    "@nestjs/common": "^10.0.0",
    "@nestjs/core": "^10.0.0",
    "@nestjs/mapped-types": "*",
    "@nestjs/platform-express": "^10.0.0",
    "@nestjs/sequelize": "^10.0.1",
    "@nestjs/typeorm": "^10.0.2",
    "dotenv": "^16.4.5",
    "mysql2": "^3.9.4",
    "reflect-metadata": "^0.2.0",
    "rxjs": "^7.8.1",
  },
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值