如何用nest中对环境变量等文件进行配置

简介: 如何用nest中对环境变量等文件进行配置

少配置文件

首先安装一个依赖 @nest/config用于自动读取配置文件


image.png


接着在根目录下创建.env文件  我们简单配置一下用例APP_NAME


image.png


接着在app.module.ts中引入ConfigModule,它的内部向外暴露的forRoot工厂函数用于我们来读取配置项, isGlobal熟悉模块应该知道,给它全局使用

image.png

接着在app.controller.ts中我们来使用一下


image.png

这样我们就读到了环境变量


还有一种方式,在node中我们还可以利用process.env来获取环境变量

image.png

image.pngx`

一个注意点!!!

如果我们把项目开源,提交到仓库时,一定要注意,如果有阿里云密钥或者类似APP_SCRECT这样的密钥,提交时一定要在.gitignore文件中加上.env文件,防止泄露


多文件配置

一般写法

当我们的环境变量有很多种类有不同,类似数据库,文件格式等等,这个时候我们可以用模块化的思想把它们提取到不同文件中,最后再统一导出


image.png


image.png


我们创建了一个app.config.ts里面定义了不同种类的环境变量,在ConfigModule的load配置项中引入,它可以将我们创建的config.ts模块与.env文件结合


image.png

image.png


我们发现这样也是可以的,但是有个弊端就是每个环境变量都放在一个文件里里面,不好管理。


我们可以提取不同到的文件中


image.png


在src下面创建一个config文件夹专门存放配置文件,最后由index.ts导出


image.png


接下来在app.module中重新导入,注意需要用到展开语法


image.png


到这一步其实已经实现了所有功能,但是没有类型提示,我们又引申出了命名空间的方式


命名空间

image.png

image.png


创建了一个database.config,将其在index.ts中导出


注意命名空间这种写法在ConfigModule中处理方式不一样,他的处理就像这样


image.png


所以我们在controller中用的时候要用依赖注入的方式,注意这里的@Inject()里面的写法是匹配到key 也就'database'


image.png


image.png

到这里也是基本完成了,但是我们注意到我这里database类型是any


接下来就是类型提示的问题了


两种类型提示方式

第一种用ts手写实现

type getType<T extends () => any> = T extends () => infer U ? U : T;
type k = typeof databaseConfig;
type databaseType = getType<k>;


image.png

第二种用config包自带的功能


image.png

两种方式都可以实现类型提示


写在最后

关于两种配置方式,一般来说在.env文件里面配置这些已经足够了,不过这种模块化的思想还是值得学习的,里面有一些细节需要注意,希望能帮到大家!

相关文章
|
8月前
|
算法 Shell 开发者
【Conan 入门教程 】Conan 2.1中的打印方式/输出管理
【Conan 入门教程 】Conan 2.1中的打印方式/输出管理
94 1
|
JavaScript
源码学习:Vite中加载环境变量(loadEnv)的实现
源码学习:Vite中加载环境变量(loadEnv)的实现
7317 0
|
5月前
|
Python
原创 | 如何在H3C设备上执行Python脚本实现配置文件的替换?
原创 | 如何在H3C设备上执行Python脚本实现配置文件的替换?
|
6月前
|
Python
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
|
7月前
|
Rust 编译器
Rust中的模块路径和pub关键字详解
Rust中的模块路径和pub关键字详解
|
8月前
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
386 3
|
8月前
|
存储 缓存 算法
【Conan 入门教程】从零开始编写第一个自定义部署器
【Conan 入门教程】从零开始编写第一个自定义部署器
168 1
|
前端开发 JavaScript
前端学习笔记202305学习笔记第二十四天-命令行执行js
前端学习笔记202305学习笔记第二十四天-命令行执行js
76 0
|
8月前
|
前端开发 JavaScript
React .env 环境变量(详细使用、命名方式)
React .env 环境变量(详细使用、命名方式)
166 0
|
8月前
|
Web App开发 存储 JSON
Deno 导入,环境变量以及代码调试
Deno 导入,环境变量以及代码调试

热门文章

最新文章

下一篇
开通oss服务