Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「代码分享」Nestjs与Prisma多环境变量文件解决方案

「代码分享」Nestjs与Prisma多环境变量文件解决方案

Eswlnk的头像
Eswlnk
2023-12-29 0:15:28
「代码分享」Nestjs与Prisma多环境变量文件解决方案-Eswlnk Blog
智能摘要 AI
本文介绍了如何在NestJS项目中使用多环境变量文件(如`.env.development`和`.env.production`)以及如何与Prisma集成。首先,通过`cross-env`工具指定环境模式,并在`package.json`中定义脚本,根据环境加载不同的`.env`文件。接着,利用`@nestjs/config`模块,通过`ConfigModule.forRoot()`方法实现全局环境变量配置的动态加载。在应用中,可通过`ConfigService`访问这些配置项。对于Prisma,可以通过`dotenv -e .env.development`命令指定加载特定环境的`.env`文件,从而实现数据库URL等配置的灵活切换。此方法适用于开发阶段,生产环境则需进一步处理。

前言

在一个稍微正式点的项目中,它的环境变量文件肯定多个的,一般会有开发用的环境变量文件,正式上线的环境变量文件,测试用的环境变量文件,甚至还有更多,但是在nestjs和prisma的官方文档中,都是只用一个环境变量文件.env,显然有点弱了,为此写一篇关于如何使用多环境变量文件的教程。

「代码分享」Nestjs与Prisma多环境变量文件解决方案-Eswlnk Blog

依赖安装

pnpm i cross-env dotenv dotenv-cli -D

理论上讲dotenv可以不用明确安装,但是但是安装一些,以后也用得到,比较是一个基建类的库,用于解决环境变量相关方面。

cross-env 用于指定NODE_ENV。

dotenv-cli是给prisma用的。

创建环境变量文件

在项目根目录创建两个环境变量文件:

.env.development

# 模式
NODE_ENV="development"
# prisma
DATABASE_URL="mysql://root:@localhost:3306/nest-blog"

.env.production

# 模式
NODE_ENV="production"
# prisma
DATABASE_URL="mysql://root:@localhost:3306/nest-blog"

这里只是示例,各种根据自己的需要调整具体的内容。

nestjs配置多环境变量

先通过cross-env来指定nestjs的运行环境模式。

配置packag.json中的"scripts"

{
  "scripts": {
    "build": "cross-env NODE_ENV=production nest build",
    "start": "cross-env NODE_ENV=development 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 NODE_ENV=production node dist/main",
  }
}

此时我们在项目中就可以通过process.env.NODE_ENV得到配置的环境模式。

然后我们就可以通过@nestjs/config这个官方模块,指定envFilePath字段了。

如果你没有安装,可以安装一下:

pnpm i @nestjs/config

文档:@nestjs/config

然后我们在app.module.ts中这么配置:

import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { ConfigModule } from "@nestjs/config";

const NODE_ENV = process.env.NODE_ENV;

@Module({
    imports: [
        ConfigModule.forRoot({
            isGlobal: true,
            envFilePath: NODE_ENV === "development" ? ".env.development" : `.env.${NODE_ENV}`
        })
    ],
    controllers: [AppController],
    providers: [AppService]
})
export class AppModule {}

这样我们在后续使用的时候,通过ConfigModule模块的ConfigService就能拿到对应的环境变量配置了。

import { Controller, Get } from "@nestjs/common";
import { AppService } from "./app.service";
import { ConfigService } from "@nestjs/config";

@Controller()
export class AppController {
    constructor(
        private appService: AppService,
        private config: ConfigService
    ) {}

    @Get()
    getHello(): string {
        console.log(this.config.get("DATABASE_URL"));  //获取到了

        return this.appService.getHello();
    }
}

由于我们可以通过process.env.NODE_ENV得到配置的环境模式,那么在@nestjs/config中我们设置命名空间也能更加方便了,可以通过这个实现一些配置变化,当然这个不是本期重点,有兴趣自己看文档了解一下即可。

Prisma环境变量配置

默认prisma它只会读取.env里面的环境变量,官方预设了:DATABASE_URL字段,现在我们希望他能读取到.env.development或者.env.production里面的DATABASE_URL字段。

以开发使用的两个常用命令为例:

packag.json

{
  "scripts": {
    "prisma:migrate": "dotenv -e .env.development prisma migrate dev",
    "prisma:reset": "dotenv -e .env.development prisma migrate reset",
  }
}

通过dotenv -e .env.development指定在运行时加载.env.development环境变量。

其他地方不用改动。

当我们运行prisma:migrate或者prisma:reset时,就可以去指定的环境变量文件里取值,大家可以根据自己需要调整环境变量文件名。

当然这只是开发时会用到的,等之后我了解到打包部署相关的内容,如果有变化,再来更新。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
nestjsprisma环境
2
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「技术教程」vite+vue3 代替require()的hooks
上一篇
「日志记录」某粤嵌公司实习培训课程商城系统
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

网络嗅探器工具:Tcpdump常用的12个命令
2021-09-03 22:56:13
WordPress开发日志:二次修改WP七牛云存储插件适应GIF
2021-11-24 23:31:46
「技术教程」定制项目包管理器 | 使用生命周期脚本限制只允许特定包管理器
2023-12-20 23:17:43

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.499 秒   |  SQL查询 29 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈