命令行设置环境变量NODE_ENV=production不起作用,process.env.NODE_ENV === 'production'永远等于false?

问题描述

在项目的 package.json 中的 script 设置命令

json 复制代码
    "dev": "set ENV=local node ./index.js",
    "beta": "set ENV=beta node ./index.js",
    "prod": "set ENV=production node ./index.js",

在 env.js 文件中的方法获取当前环境,和判断当前环境,在 index.js 中,将方法挂在 app 上,可以通过 app.env 获取对应的方法

javascript 复制代码
    // 是否本地环境
    isLocal() {
      return process.env.ENV === "local";
    },
    // 是否测试环境
    isBeta() {
      return process.env.ENV === "beta";
    },
    // 是否生产环境
    isProduction() {
      return process.env.ENV === "production";
    },
    // 获取当前环境
    get() {
      return process.env.ENV ?? "local";
    }

当使用 npm run dev , npm run beta, npm run prod 启动项目对应的环境,用 console.log(app.env.get()) 可以输出对应的 local, beta, production。但是判断是否测试环境,是否生产环境时,永远为 false。

检查一(操作系统问题)

在设置环境变量命令时,操作系统的不同,命令也不同,上述问题描述中是在 Windows 系统中的写法,而在 Mac 或 Linux 中可不用 set , 或把 set 改为 export 。

json 复制代码
    "dev": "ENV=local node ./index.js",
    "beta": "ENV=beta node ./index.js",
    "prod": "ENV=production node ./index.js",

使用了对应操作系统的设置还是没有解决问题

检查二(引号问题)

bash 复制代码
    set ENV=production node ./index.js
    # 或
    set ENV='production' node ./index.js

两种写法对应判断结果也是有影响的,'production' 和 production 会判断为 false 。还有可能使用了双引号(""),production 后有空格的问题导致的。使用 process.env.ENV.trim() === "production" 可去除 production 后的空格。 此操作可能还是无法正确判断环境。

检查三(使用 cross-env )

安装 cross-env 插件(不推荐全局安装)

sql 复制代码
    npm install cross-env --save-dev

使用 cross-env 设置环境命令

json 复制代码
    "dev": "cross-env ENV=local node ./index.js",
    "beta": "cross-env ENV=beta node ./index.js",
    "prod": "cross-env ENV=production node ./index.js",

推荐直接使用 cross-env ,解决问题省时又省力。

相关推荐
锋行天下4 分钟前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
jktantan19 分钟前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
计算机魔术师42 分钟前
Anthropic官方插件被「寄生」,背后是同一类攻击又来了
前端
我命由我123451 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
key_3_feng1 小时前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
LaughingZhu2 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
Lank_M2 小时前
抠图结果缩放后边缘发脏,该怪的不是插值
前端
jerrywus2 小时前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude
补码缩写2 小时前
canvas 与 sharp 缩放透明图:默认预乘,非预乘得拆通道
前端
静默回滚2 小时前
抠图 PNG 缩小再放大,边缘又糊又白是两件事
前端