#env-var #env-file #environment #env #settings

未维护 bin+lib dotenv

Rust语言的dotenv实现

21个版本 (破坏性更新)

0.15.0 2019年10月21日
0.14.1 2019年5月15日
0.13.0 2018年5月30日
0.11.0 2018年2月20日
0.2.0 2014年11月20日

490配置 中排名

Download history 131286/week @ 2024-03-14 119195/week @ 2024-03-21 128018/week @ 2024-03-28 125940/week @ 2024-04-04 124984/week @ 2024-04-11 130661/week @ 2024-04-18 131718/week @ 2024-04-25 118956/week @ 2024-05-02 121335/week @ 2024-05-09 133447/week @ 2024-05-16 130686/week @ 2024-05-23 139831/week @ 2024-05-30 143897/week @ 2024-06-06 133139/week @ 2024-06-13 132439/week @ 2024-06-20 112516/week @ 2024-06-27

549,757 每月下载量
用于 1,390 个crate (1,129 直接使用)

MIT 许可证

35KB
847

rust-dotenv

CI codecov Crates.io

注意! 这是一个v0.*版本!请期待周围存在错误和问题。强烈鼓励提交pull请求和问题!

引用 bkeepers/dotenv

配置存储在环境中是十二要素应用的一个原则。任何可能在部署环境之间发生变化的内容,例如数据库的资源句柄或外部服务的凭证,都应该从代码中提取到环境变量中。

此库旨在用于开发或测试环境,在这些环境中设置环境变量不切实际。它从可用的.env文件中加载环境变量,并与操作系统提供的实际环境变量合并。

用法

最简单和最常见的方法是在应用程序启动时调用dotenv::dotenv,这将从当前目录或其父目录中名为.env的文件中加载环境变量;之后,您只需调用由std::os提供的所需环境相关方法即可。

如果您需要更精细地控制文件名称或位置,您可以使用crate提供的from_filenamefrom_path方法。

dotenv_codegen提供了dotenv!宏,其行为与env!相同,但首先在编译时尝试加载.env文件。

示例

.env文件看起来像这样

# a comment, will be ignored
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42

您可以选择在每个行前加上单词export,这将方便您在shell中源整个文件。

使用Dotenv的示例项目如下

extern crate dotenv;

use dotenv::dotenv;
use std::env;

fn main() {
    dotenv().ok();

    for (key, value) in env::vars() {
        println!("{}: {}", key, value);
    }
}

变量替换

可以在 .env 文件中使用 $VARIABLE 语法来重用变量。其语法和规则与bash类似,以下是一个示例:


VAR=one
VAR_2=two

# Non-existing values are replaced with an empty string
RESULT=$NOPE #value: '' (empty string)

# All the letters after $ symbol are treated as the variable name to replace
RESULT=$VAR #value: 'one'

# Double quotes do not affect the substitution
RESULT="$VAR" #value: 'one'

# Different syntax, same result 
RESULT=${VAR} #value: 'one'

# Curly braces are useful in cases when we need to use a variable with non-alphanumeric name
RESULT=$VAR_2 #value: 'one_2' since $ with no curly braces stops after first non-alphanumeric symbol 
RESULT=${VAR_2} #value: 'two'

# The replacement can be escaped with either single quotes or a backslash:
RESULT='$VAR' #value: '$VAR'
RESULT=\$VAR #value: '$VAR'

# Environment variables are used in the substutution and always override the local variables
RESULT=$PATH #value: the contents of the $PATH environment variable
PATH="My local variable value"
RESULT=$PATH #value: the contents of the $PATH environment variable, even though the local variable is defined

Dotenv 将解析文件,按照注释中的描述替换变量。

使用 dotenv!

dotenv_codegen 添加到您的依赖项中,并将以下内容添加到您的crate顶部

#[macro_use]
extern crate dotenv_codegen;

然后,在您的crate中

fn main() {
  println!("{}", dotenv!("MEANING_OF_LIFE"));
}

lib.rs:

本crate提供了一种类似于ruby dotenv gem风格的配置加载器。这个库旨在用于开发或测试环境,在这些环境中设置环境变量并不实用。如果存在,它会从 .env 文件中加载环境变量,并将它们与操作系统提供的实际环境变量混合。

依赖项

~120KB