疑问
在工作中我们常常会遇到.env的文件,在这个文件中我们配置的一些环境变量,可以在程序中通过process.env进行获取使用,好多人都不知道.env 中的变量是如何添加到process.env上去的,接下来我们一起去探索。
.env
我们项目尝尝用到的.env文件格式如下:
APP_NAME='测试'
NAME='源码共读'
AGE=7
OTHER='welcome yours'
从上述的疑问中我们可以知道,.env 文件中的内容最后将以对象的形式,扩展到process.env 上 所以我们大胆的猜测dotenv会做如下几件事情:
- 读取.env文件
- 将.env文件转成对象
- 将对象扩展到process.env对象上
初步的实现
根据我们猜测我们对于dotenv 进行简单的实现
const fs = require('fs')
const path = require('path')
const src= path.join(__dirname,'.env')
//1读取env 文件
function readFile(src){
//异步读取文件
return fs.readFileSync(src,'utf-8')
}
//2 将其转成对象
function parse(){
const obj={}
//通过回车符号进行分隔
const strArr = readFile(src).split(/\n/)
strArr.forEach((item,index)=>{
///通过=进行分隔 将获取到对象的key 和value值
obj[item.split('=')[0]]=item.split('=')[1].replace(/\r/,'')
})
return obj
}
//3 追加到process.env 上
function config(){
const obj = parse()
//将.env 中的文件对象扩展到process.env 对象上
for(let key in obj){
process.env[key]=obj[key]
}
}