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

如何从Webpack编译的Node运行脚本中获取运行时环境变量?

获取Node.js Web服务器运行时环境变量(Webpack打包场景)

这种用Webpack打包Node.js服务器的场景确实比较少见,但要拿到真实的运行时环境变量是完全可行的,核心是阻止Webpack对process.env的默认替换行为。下面是具体的解决方案:

关键配置:让Webpack保留真实的process对象

Webpack默认会模拟Node.js的全局对象(比如process),并把process.env替换成编译时的值,这就是你只看到NODE_ENV的原因。要改变这个行为,需要在webpack.config.js里做两个关键配置:

  • 设置target: 'node':告诉Webpack我们打包的是Node.js应用,而不是浏览器端代码,这样它会保留Node.js特有的模块和全局变量。
  • 禁用process的模拟:通过node.process: false配置,让Webpack不要替换或模拟process对象,直接使用运行时的真实process。

示例配置如下:

const webpack = require('webpack');

module.exports = {
  entry: './src/server.js',
  output: {
    filename: 'server.bundle.js',
    path: __dirname + '/dist'
  },
  target: 'node', // 必须设置为node
  node: {
    process: false // 关键:不模拟process,使用运行时的真实对象
  },
  plugins: [
    // 只保留编译时的NODE_ENV(如果需要的话),其他环境变量留到运行时获取
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    })
  ]
};

验证运行时环境变量

配置完成后,打包你的服务器代码,然后通过命令行传递环境变量启动:

# 传递自定义环境变量并启动打包后的服务器
MY_CUSTOM_VAR="hello-world" NODE_ENV="production" node dist/server.bundle.js

在你的服务器代码里,直接访问process.env.MY_CUSTOM_VAR就能拿到真实的运行时值了:

// src/server.js
console.log('运行时MY_CUSTOM_VAR:', process.env.MY_CUSTOM_VAR); // 输出 "hello-world"
console.log('运行时NODE_ENV:', process.env.NODE_ENV); // 输出 "production"

注意事项

  • 不要在DefinePlugin里定义其他环境变量,否则Webpack会把这些变量替换成编译时的值,运行时就拿不到动态变化的内容了。
  • 如果你使用了webpack-dev-server,注意它是针对浏览器端开发的,不适用于Node.js服务器,直接用node命令运行打包后的文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:32:20