Deno.env.get无法加载.env文件环境变量的原因及解决方案
Deno环境变量加载问题:原因及解决方案
问题背景
用Deno标准库的dotenv模块本地运行一切正常,但部署后环境变量加载报错。换成Deno.env API后,发现它根本读不到.env文件里的变量:
const uri = Deno.env.get("MONGO_URI"); console.log("URI:", uri); // 输出undefined
核心原因
Deno.env API只负责读取进程层面的环境变量,不会主动去解析.env文件。进程级环境变量指的是启动Deno时,系统、部署平台预先注入的变量——比如通过命令行MONGO_URI=mongodb://localhost:27017 deno run app.ts传入的,或是Deno Deploy这类平台后台配置的变量。而dotenv模块的作用才是读取.env文件内容,要么返回解析后的对象,要么把变量注入到进程环境里(需配置参数)。
你已实现的可行方案
你已经完成了本地/部署环境的差异化加载逻辑,代码如下:
let uri; // 本地开发时从dotenv加载环境变量 export async function loadEnvFromDotenv() { const { load } = await import("https://deno.land/std@0.221.0/dotenv/mod.ts"); const env = await load(); uri = env["MONGO_URI"]; } // 根据"--local"标志条件加载环境变量 if (Deno.args.includes("--local")) { await loadEnvFromDotenv(); // 本地开发时从dotenv加载变量 } else { uri = Deno.env.get("MONGO_URI"); // 部署时从Deno.env加载变量 }
这个方案逻辑没问题:本地开发用dotenv读.env,部署时直接用平台提供的进程环境变量。
额外补充:让Deno.env读取.env文件的方法
如果确实需要通过Deno.env读取.env里的变量,只需在调用dotenv的load()时加上export: true参数,让它把解析后的变量注入到进程环境中:
import { load } from "https://deno.land/std@0.221.0/dotenv/mod.ts"; // 加载.env并注入进程环境 await load({ export: true }); // 此时Deno.env可以读到变量 const uri = Deno.env.get("MONGO_URI");
内容的提问来源于stack exchange,提问作者suresh
相关产品推荐
相关产品推荐

