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

Next.js中.env.local环境变量无法访问返回undefined问题求助

解决Next.js环境变量在独立Node脚本中返回undefined的问题

问题根源

你直接用ts-node --esm db/index.ts运行脚本时,绕开了Next.js的环境变量加载流程。Next.js的.env.local变量注入只在它自身的构建、开发服务器或next run命令触发的脚本中生效,独立用ts-node运行Node脚本时,Node不会自动读取.env文件,自然拿不到变量。

解决方案

方案1:手动用dotenv加载.env文件

Node本身没有内置读取.env文件的能力,需要借助dotenv包手动加载:

  1. 安装dotenv依赖:
    npm install dotenv --save-dev
    
  2. 在db/index.ts顶部添加加载代码:
    import dotenv from 'dotenv';
    import path from 'path';
    
    // 加载项目根目录的.env.local文件
    dotenv.config({ path: path.join(process.cwd(), '.env.local') });
    
    // 之后再打印变量
    console.log(process.env.ENV_VAR);
    console.log(process.env.NEXT_PUBLIC_ENV_VAR);
    
  3. 重新运行脚本:ts-node --esm db/index.ts

方案2:用Next.js的next run命令运行脚本

Next.js提供了next run命令,可以自动加载项目的环境变量,无需额外配置:

  1. 在package.json的scripts中添加:
    "scripts": {
      "db-script": "next run db/index.ts"
    }
    
  2. 运行脚本:
    npm run db-script
    
    这种方式下,不管变量有没有NEXT_PUBLIC_前缀,服务器端脚本都能正常访问。

额外检查项

  • 确认.env.local文件确实在项目根目录(root/.env.local),路径不能错
  • 变量定义不要有多余空格,比如ENV_VAR= test(等号后有空格)会导致变量值带空格,甚至读取失败
  • 修改.env.local后必须重启脚本,因为环境变量只会在脚本启动时加载一次

内容的提问来源于stack exchange,提问作者letmeeatbrioche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:34:53