dotenv
dotenv 是一个零依赖模块,可以将环境变量从文件加载到 process.env 中
简单实现
const fs = require("fs");
const path = require("path");
function parse(file) {
return Object.fromEntries(
file
.toString()
// win 的回车是 \r\n mac 的回车是\r unix回车是 \n
.split("\r\n")
.map(str => str.split("="))
);
}
const hasOwnProp = Object.prototype.hasOwnProperty;
/**
* 1、查找执行命令路径下的 .env 文件
* 2、按照特定格式解析 .env 文件,转换成对象
* 3、将解析得到的对象赋值到 process.env 下
* @returns
*/
function config() {
const filePath = path.resolve(process.cwd(), ".env");
const result = {};
// 如果当前目录下没有这个文件,则直接退出
if (!fs.existsSync(filePath)) return result;
try {
// 从文件中解析出对象
const parsed = parse(fs.readFileSync(filePath));
Object.entries(parsed).forEach(([k, v]) => {
// 如果不在 process.env 的时候再赋值
if (!hasOwnProp.call(process.env, k)) {
process.env[k] = result[k] = v;
}
});
} catch (error) {}
return result;
}
module.exports.config = config;