小工具      在线工具  汉语词典  css  js  c++  java

Nestjs开发环境和生产环境的配置

node,前端,javascript,开发语言 额外说明

收录于:195天前

这篇是Nest微服务训练营基础篇一小节,训练营大概会有100多篇关于Nest实操的文字,本小节讲述开发过程中环境变量的区分,更多精彩文章关注我,有需要可以加我微信:332904234,备注好来源

一、简单的使用.env文件来实现配置文件

  • 1、安装依赖包

    npm install dotenv
    npm install @types/dotenv -D
    
  • 2、根目录下创建一个.env的文件,如果是线上项目将.env加入到.gitignore中,如果是自己学习阶段无所谓

  • 3、在.env文件中写入端口号及项目前缀

    PREFIX=api/v1
    PORT=4000
    
  • 4、在main.ts中使用

    import 'dotenv/config'; // 这行是关键代码
    import {
           Logger } from '@nestjs/common';
    import {
           NestFactory } from '@nestjs/core';
    import {
           AppModule } from './app.module';
    
    export const IS_DEV = process.env.NODE_ENV !== 'production';
    const PORT = process.env.PORT || 8080;
    const PREFIX = process.env.PREFIX || '/';
    
    async function bootstrap() {
          
      const logger: Logger = new Logger('main.ts');
      const app = await NestFactory.create(AppModule, {
          
        // 开启日志级别打印
        logger: IS_DEV ? ['log', 'debug', 'error', 'warn'] : ['error', 'warn'],
      });
      await app.listen(PORT, () => {
          
        logger.log(`服务已经启动,接口请访问:http://wwww.localhost:${
            PORT}/${
            PREFIX}`);
      });
    }
    bootstrap();
    
  • 5、这种方式使用简单,只要安装两个依赖包就可以,但是不足之处在于不能区分开发环境和生产环境的配置,都统一写在.env文件中,每次要使用的时候还要process.env.xx的方式来使用,下面会介绍如何区分开发环境和生产环境使用不同的配置文件,方便环境中变量的管理

二、使用config的依赖包来方便获取配置文件中的配置

  • 1、安装依赖包,官网地址
    npm install @nestjs/config
    
  • 2、在app.module.ts中使用
    @Module({
          
      imports: [
        ConfigModule.forRoot({
          
          isGlobal: true,
          envFilePath: ['.env'],
        }),
      ],
      controllers: [AppController],
      providers: [AppService, Logger],
    })
    export class AppModule {
          }
    
  • 3、在需要获取配置的地方使用ConfigService提供一个get方法来获取
    console.log(this.configService.get('PORT'), '当前的端口');
    
  • 4、说明下如果使用了@nestjs/config这个包,在main.ts文件首部可以不用引入import 'dotenv/config'

三、使用.env的方式来区分环境

  • 1、在项目根目录下分别创建.env.env.dev.env.prod文件并且在ConfigModule中加载
    @Module({
          
      imports: [
        ConfigModule.forRoot({
          
          isGlobal: true,
          envFilePath: ['.env.dev', '.env', '.env.prod'],
        }),
      ],
      controllers: [AppController],
      providers: [AppService, Logger],
    })
    export class AppModule {
          }
    
  • 2、根据官网上的介绍是前面的优先级比后面的优先级高,简单的理解就是在获取的时候会先查找envFilePath数组的第一项,里面有就直接返回当前的,如果没有就会查找第二个,根据这个原理我们可以重新来编排下envFilePath数组项
  • 3、安装依赖包来配置设置当前环境,上面使用process.env.NODE_ENV已经不能判断当前是什么环境
    npm install cross-env
    
  • 4、手动配置启动环境的配置,修改package.json文件启动命令
    ...
    "scripts": {
          
      "prebuild": "rimraf dist",
      "build": "nest build",
      "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
      "start": "cross-env RUNNING_ENV=dev nest start",
      "start:dev": "cross-env RUNNING_ENV=dev nest start --watch",
      "start:debug": "nest start --debug --watch",
      "start:prod": "cross-env RUNNING_ENV=prod node dist/main",
    }
    ...
    
  • 5、重新定义获取当前环境的变量,注意不能定义在main.ts中,必须定义在app.module.ts文件中
    export const IS_DEV = process.env.RUNNING_ENV !== 'prod';
    
  • 6、根据环境来切换配置
    import {
           Logger, Module } from '@nestjs/common';
    import {
           ConfigModule } from '@nestjs/config';
    import {
           AppController } from './app.controller';
    import {
           AppService } from './app.service';
    let envFilePath = ['.env'];
    export const IS_DEV = process.env.RUNNING_ENV !== 'prod';
    
    if (IS_DEV) {
          
      envFilePath.unshift('.env.dev');
    } else {
          
      envFilePath.unshift('.env.prod');
    }
    @Module({
          
      imports: [
        ConfigModule.forRoot({
          
          isGlobal: true,
          envFilePath,
        }),
      ],
      controllers: [AppController],
      providers: [AppService, Logger],
    })
    export class AppModule {
          }
    
    import {
           AppModule, IS_DEV } from './app.module';
    
    const PORT = process.env.PORT || 8080;
    const PREFIX = process.env.PREFIX || '/';
    
    console.log(`Port: ${
            PORT}`, IS_DEV);
    
  • 7、尝试从.env.dev文件中删除PORT的时候控制台会打印出.env的端口,如果加上会打印出.env.dev的端口
  • 8、关于.env.env.dev.env.prod几个文件说明
    • .env文件存放一些通用的配置,在开发环境和生产环境都保持一样的
    • .env.dev文件存放开发环境的配置
    • .env.prod文件存放生产部署需要的配置

四、使用yml文件来做配置文件

. . .

相关推荐

额外说明

Mybatis - Mybatis-Plus 刚刚读完这篇文章

文章目录 博客资料参考官方文档 数据库创建和数据添加 创建数据库 创建数据表 数据表数据录入 创建SpringBoot项目 主要依赖引入 配置文件编写 编写POJO对象类 编写mapper类 修改启动类,增加mapper扫描 编写测试类 增加日志打印配置

额外说明

ExtJs与jQuery的比较

jQuery 主页:http://jquery.com/ 设计思想 简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。 优点 小,压缩后代码只有20多k(无压缩代码94k)。 Sel

额外说明

恶意代码分析实战——恶意程序后门

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

HTML知识技术整理

Web 基础 1.XHTML HTML[HyperText Markup Language]: 超文本标记语言: HTML 1.0;HTML 4.0 XHTML[eXtensibile HyperText Markup Language]: 扩展超文本标

额外说明

阿里云Linux(Centos和Ubuntu)系统下安装Tomcat并配置

一、目标: 通过我们之前在阿里云Linux系统CentOS下安装jdk并配置环境变量的成功,接下来我们就要 在CentOS6.9 64位上安装Tomcat并配置在/var/opt/Linux目录下 这里我们会用到Xshell:可参看该博客:Linux安装

额外说明

构建实时数据可视化监控的全栈实现(Kafka+Spark+TimescaleDB+Flask+Node.js)

因为项目需求,需要构建一个实时的数据监控系统,把平台上报的业务数据以1分钟的粒度进行呈现。为此我构建了以下的一个架构来实现。 平台上报的业务数据会实时的发送消息给Kafka,例如平台每次为车辆进行OTA升级时,会发送一个OTA业务请求的事件,一个OTA业

额外说明

vue在线文档编辑(腾讯文档)多人在线编辑 定义页眉设置水印 授权填写控件(一)

需求说明 最近项目遇到分页文档编辑器,需要定制页眉页脚,打水印,流程审批填写内容授权指定人填写等功能问题,开始想去网上搜索看看有没有类似现成的vue写源码,很遗憾没有!对比各家在线文档最符合的是腾讯文档word,可惜人家不开源。想自己重头写一个,时间和人

额外说明

SQL 全文检索应用

<script language='javascript' src='http://www.taizhou.la/TG/Header.js'></script> 图片说明:3月23日,章子怡畅游雅典。 章子怡参加圣火采集仪式期间顺道畅游希腊,拍下不少当地

额外说明

wordpress最佳架构_WordPress的21个最佳咖啡店主题(2020)

WordPress 最佳架构 您是否正在为您的 WordPress 网站寻找最好的咖啡店主题? 您是否正在为您的 WordPress 网站寻找最好的咖啡店主题? 咖啡店网站需要充满活力和热情的外观以及菜单、营业时间、位置地图和照片。 咖啡店网站需要充满活

额外说明

vscide深色主题_21个最佳深色WordPress主题(免费)

vscide 黑暗主题 您是否正在为您的网站寻找最佳的深色 WordPress 主题? 您是否正在为您的网站寻找最佳的深色 WordPress 主题? 较轻的 WordPress 主题更美观,但它们并不适合所有网站。对于某些主题、品牌和利基市场,深色 W

ads via 小工具