Strapi(Node)应用修改.env环境变量后不生效问题排查
以下是针对你遇到的Strapi构建环境变量读取异常的排查方向和解决办法:
检查Strapi环境变量加载规则
Strapi除了NODE_ENV外,还支持STRAPI_ENV变量来指定环境配置文件,确保你构建脚本里同时设置了这两个变量,且项目根目录存在.env.stage文件,里面的Redis配置和.env.dev完全区分开。可以修改构建脚本验证变量:"scripts": { "build:stage": "NODE_ENV=stage STRAPI_ENV=stage echo $NODE_ENV $STRAPI_ENV && strapi build" }执行后确认终端输出的环境变量为
stage stage,同时核对.env.stage里的Redis变量无拼写错误。检查配置文件的环境判断逻辑
打开config/cache.js或config/database.js(取决于Redis的使用场景),查找判断环境的代码块:
比如之前可能存在类似代码:const redisConfig = process.env.NODE_ENV === 'local' ? devRedisConfig : prodRedisConfig;确认是否已将
local的判断替换为dev,并且添加了stage环境的分支逻辑,避免stage环境 fallback 到DEV配置。清理Strapi自身构建缓存
Strapi会在项目根目录生成.strapi/cache缓存文件夹,这部分缓存不在npm/yarn缓存范围内。直接删除.strapi整个文件夹,再重新执行构建命令。排查终端环境变量残留
终端可能残留之前设置的NODE_ENV变量,执行echo $NODE_ENV查看当前值,如果输出为dev,则执行unset NODE_ENV清空后再运行构建脚本。验证构建脚本的跨平台兼容性
如果是跨平台开发,确保安装了cross-env依赖,否则Windows系统下环境变量设置会失效:- 安装依赖:
yarn add cross-env --dev - 修改脚本:
"scripts": { "build:stage": "cross-env NODE_ENV=stage STRAPI_ENV=stage strapi build" }
- 安装依赖:
临时添加日志验证变量读取
在Redis配置代码中添加日志输出,确认实际读取的环境和变量值:console.log('当前环境:', process.env.NODE_ENV); console.log('Redis配置:', process.env.REDIS_HOST, process.env.REDIS_PORT);执行构建后查看终端日志,确认变量是否正确加载。
内容的提问来源于stack exchange,提问作者Senate No. 7

