You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:43