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

Angular Universal如何正确设置NODE_ENV为production

Angular 13 Universal Express 固定NODE_ENV为development的解决方案

核心原因

  • 跨平台环境变量写法不兼容:直接在npm脚本中写NODE_ENV=production仅支持macOS/Linux类Unix系统,Windows默认无法识别该语法
  • Angular Universal开发服务默认覆写变量:执行ng serve、npm run dev:ssr这类本地开发命令时,@nguniversal/express-engine的构建器会主动将process.env.NODE_ENV重置为development,外部传入的参数优先级低于内部逻辑,因此不会生效。

分场景解决

生产环境部署(推荐方案)

生产环境不要使用开发服务启动项目,按以下步骤操作:

  1. 执行带生产配置的SSR构建命令
npm run build:ssr -- --configuration production

必须携带--configuration production参数,否则Angular会默认使用development配置完成构建。
2. 启动构建后的服务端产物,启动时手动指定NODE_ENV:

  • macOS/Linux系统:
NODE_ENV=production node dist/[你的项目名称]/server/main.js
  • Windows cmd环境:
set NODE_ENV=production && node dist/[你的项目名称]/server/main.js
  • Windows PowerShell环境:
$env:NODE_ENV="production"; node dist/[你的项目名称]/server/main.js
  1. 跨平台兼容写法(无需区分操作系统,推荐)
    先安装跨平台环境变量工具:
npm install cross-env --save-dev

在package.json的scripts字段中新增生产启动脚本:

"start:prod:ssr": "cross-env NODE_ENV=production node dist/[你的项目名称]/server/main.js"

后续直接执行npm run start:prod:ssr即可正常启动生产模式的SSR服务,此时打印process.env.NODE_ENV会输出production。

本地调试临时模拟production模式

如果需要在本地开发阶段临时将NODE_ENV设为production,不要修改npm脚本参数,直接打开项目根目录下的server.ts文件,将环境变量赋值代码放在所有导入语句的最顶部,优先于其他所有逻辑执行:

// server.ts 最顶部,所有import之前写
process.env.NODE_ENV = 'production';

// 原有代码保留,例如import 'zone.js/node'、express初始化逻辑等

注意:硬编码环境变量仅用于本地调试,生产环境请删除该段硬编码,通过启动参数传入环境变量,避免后续多环境部署出现配置冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:45:38