使用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
相关产品推荐
相关产品推荐

