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

使用NPM Workspace时.env.local环境变量无法加载求助

NPM Workspace中.env.local无法加载的解决方案

问题核心:dotenv.config()默认会从当前执行脚本的工作目录加载.env文件,而在NPM Workspace环境下,执行子package的脚本时,默认工作目录是项目根目录,不是packages/indexer,所以找不到该目录下的.env.local。

以下是几种可行的解决方法:

方法1:在代码中明确指定.env.local路径

修改packages/indexer/src/queue.ts中的dotenv配置,通过path模块指向子package目录下的.env.local:

// packages/indexer/src/queue.ts
import dotenv from 'dotenv';
import path from 'path';
import { GCPPubSubService } from './services/gcp.pubsub.service';

// 基于当前文件位置向上回溯找到.env.local
dotenv.config({ path: path.resolve(__dirname, '../.env.local') });

console.log(process.env);

方法2:在启动脚本中指定dotenv配置路径

修改packages/indexer/package.json的scripts,直接在nodemon命令中通过dotenv的命令行参数指定配置文件路径:

"scripts": {
  "dev": "nodemon --exec 'node -r dotenv/config src/queue.ts dotenv_config_path=./.env.local'"
}

这种方式无需修改业务代码,直接通过启动命令传递配置。

方法3:强制切换工作目录后执行脚本

在scripts中先切换到子package的目录,再启动nodemon,确保dotenv能在正确目录下找到.env.local:

"scripts": {
  "dev": "cd ./packages/indexer && nodemon src/queue.ts"
}

注:即使在项目根目录执行npm run dev --workspace=packages/indexer,此方法依然有效,因为cd命令会切换到子package目录。

额外检查项:

  • 确认.env.local文件名拼写正确(无多余后缀,比如.env.local.txt)
  • 确保dotenv已正确安装在packages/indexer的依赖中(而非仅根目录依赖)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:44:53