#env-var #env-file #dotenv #环境 #env #文件格式 #POSIX

potenv

Rust实现的POSIX兼容的dotenv文件格式规范

2个不稳定版本

0.2.0 2024年1月15日
0.1.0 2023年3月21日

#429 in 配置

自定义许可

41KB
1K SLoC

potenv

Crates.io Docs.rs Codecov

POSIX兼容的dotenv文件格式规范的Rust实现。

用法

从当前工作目录中的.env文件加载环境变量

potenv::load([".env"]).expect("Failed to load .env file.");

为了方便,返回一个加载变量的迭代器

let vars = potenv::load([".env"]).unwrap();
for (name, value) in vars {
  assert_eq!(value, std::env::var(name).unwrap());
}

如果您只想评估dotenv文件而不将其加载到环境中,请使用以下方法

use potenv::Potenv;

let vars = Potenv::default()
  .evaluate([".env"])
  .unwrap();

默认情况下,环境变量优先于dotenv文件中定义的变量。

当这不是所需的行为时,可以使用以下方法

use potenv::Potenv;

let vars = Potenv::default()
  .override_env(true)
  .load([".env"])
  .unwrap();

如果您不想从进程环境读取和/或写入,可以实现env::EnvProvider trait。

例如,这是如何对所有变量进行frobnicate的

use potenv::{Potenv, env::EnvProvider};

pub struct Frobnicator;

impl EnvProvider for Frobnicator {
  fn var(&self, name: &str) -> Option<String> {
    Some("frobnicated".into())
  }
  fn set_var(&mut self, name: &str, value: &str) {}
}

let vars = Potenv::new(Frobnicator, false)
  .evaluate([".env"])
  .unwrap();
for (name, value) in vars {
  assert_eq!("frobnicated", value);
}

如果您只想在单元测试中模拟环境,env::EnvProvider trait已针对HashMap<String, String>

use std::collections::HashMap;
use potenv::Potenv;

let mut mock = HashMap::new();
mock.insert("name".into(), "value".into());

let vars = Potenv::new(mock, false)
  .evaluate([".env"])
  .unwrap();

依赖项

~300–760KB
~18K SLoC