API项目 库项目共享.env 配置

来源:Rust 教程 / 时间:2026-09-20

方案一 通过环境变量共享配置
依赖进程级环境变量 主项目加载后库项目直接读取即可

1. 主项目(projectName)配置
首先在 projectName/Cargo.toml
添加dotenv依赖

[package]
name = “projectName”
version = “0.1.0”
edition = “2024”

[dependencies]
dotenv = “0.15”

在main.rs 最开头加载.env
在所有读取环境变量的代码之前
use dotenv::dotenv;
use std::env;
use projectName::use_config;

fn main() {
// 加载.env文件 忽略加载失败(比如生产环境可能没有该文件)
dotenv().ok();

// 测试主项目是否能读取到变量
if let Ok(val) = env::var(“TEST_CONFIG”) {
println!(“主项目读到配置: {}”, val);
}

// 调用库项目的逻辑
use_config();
}

2. 库项目(projectName)读取配置
lib.rs
直接读取环境变量 无需重复加载.env

use std::env;
pub fn use_config() {
match env::var(“TEST_CONFIG”) {
Ok(val) => println!(“库项目读到配置: {}”, val),
Err(e) => println!(“库项目读取配置失败: {}”, e),
}
}

3. 确保主项目依赖库项目
projectName/Cargo.toml
添加本地路径依赖

[dependencies]
dotenv = “0.15”
projectName = { path = “…/projectName” }


方案二 显式传递配置结构体(推荐)
环境变量是全局依赖
显式传递配置结构体 符合Rust的设计理念
也更便于测试和维护

1. 库项目定义配置结构体
projectName/src/lib.rs
定义需要的配置结构

#[derive(Debug, Clone)]
pub struct AppConfig {
pub database_url: String,
pub api_key: String,
}

pub fn do_business_logic(config: &AppConfig) {
println!(“执行业务逻辑 使用配置: {:?}”, config);
}

2. 主项目加载配置并传递
projectName/src/main.rs
加载.env并构造配置结构体 传递给库

use dotenv::dotenv;
use std::env;
use projectName::{AppConfig, do_business_logic};

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

// 从环境变量读取值并构造配置结构体
let config = AppConfig {
database_url: env::var(“DATABASE_URL”)
.expect(“DATABASE_URL 必须在.env文件中设置”),
api_key: env::var(“API_KEY”)
.expect(“API_KEY 必须在.env文件中设置”),
};

// 传递配置给库项目
do_business_logic(&config);
}

客服