2 个版本
0.0.2 | 2023年12月8日 |
---|---|
0.0.1 | 2023年12月8日 |
#238 在 配置
在 2 个 Crates 中使用 (通过 dotenvx_codegen_implement…)
37KB
887 行
dotenvx - rust-dotenv
从 dotenv crate 分支。
这是一个 v0.* 版本!请期待所有方面的错误和问题。
关于 dotenv
将配置存储在环境中是十二要素应用程序的一个原则之一。任何可能在部署环境中发生变化的资源(如数据库的资源句柄或外部服务的凭证)都应从代码中提取出来,存储在环境变量中。
此库旨在在开发或测试环境中使用,在这些环境中设置环境变量是不切实际的。如果可用,它会从名为 .env
的文件中加载环境变量,并将这些变量与操作系统提供实际环境变量混合。
用法
最简单、最常见的方法是在应用程序启动时调用 dotenv::dotenv
,这将从当前目录或其父目录中名为 .env
的文件中加载环境变量;之后,您可以像使用 std::os
提供的环境相关方法一样调用所需的方法。
如果您需要更精细地控制文件的名称或位置,可以使用 crate 提供的 from_filename
和 from_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"));
}
许可证
本项目采用 MIT 许可证。
依赖项
~160KB