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

使用Webpack 5和Node在AWS Lambda中读取process.env环境变量

Webpack打包Lambda时process.env为空的解决办法

首先明确:Lambda读取环境变量根本不需要额外的AWS库,process.env是Node.js原生API,所以你怀疑误删AWS库的方向不对,问题核心出在Webpack 5的打包配置上。

下面是具体的修复步骤:

1. 配置Webpack保留process对象

Webpack 5默认会把process这类Node.js全局变量处理成空对象,需要在webpack.config.js里显式配置保留引用:

module.exports = {
  // 其他配置...
  node: {
    process: true, // 关键:让Webpack保留process的原生引用
    __dirname: false,
    __filename: false
  }
};

2. 禁止DefinePlugin静态化整个process.env

如果你的配置里用到了DefinePlugin,别直接把整个process.env转成静态JSON,否则Lambda运行时的动态环境变量会被打包时的静态值覆盖。要么只替换固定变量,要么删掉整个process.env的替换逻辑:

// 错误示例:会把process.env替换成打包时的静态值
new webpack.DefinePlugin({
  'process.env': JSON.stringify(process.env)
});

// 正确做法:只替换固定环境变量,比如NODE_ENV
new webpack.DefinePlugin({
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
});

3. 用webpack-node-externals排除外部依赖

Lambda运行环境自带AWS SDK,没必要打包进代码。使用webpack-node-externals可以跳过外部依赖的打包,同时避免Webpack误处理这些依赖中的process.env引用:
先安装依赖:

npm install webpack-node-externals --save-dev

再在配置中添加:

const nodeExternals = require('webpack-node-externals');

module.exports = {
  target: 'node', // 必须指定target为node,保证打包出Node.js兼容代码
  externals: [nodeExternals()],
  // 其他配置...
};

4. 明确引用具体环境变量

如果Webpack的mode设为production,它会优化掉未被明确引用的变量。别直接读取整个process.env对象,要明确写出需要的变量:

// 推荐:明确引用具体环境变量
const MY_LAMBDA_VAR = process.env.MY_LAMBDA_VAR;

// 不推荐:直接读取整个process.env,易被Webpack优化移除
const allEnv = process.env;

5. 验证打包后的代码

打包完成后,查看生成的bundle文件,确认process.env的原生引用是否被保留,而非替换成空对象或静态值。如果仍有问题,检查是否是terser-webpack-plugin这类压缩插件移除了未使用变量,需调整压缩配置。

内容的提问来源于stack exchange,提问作者Damien Sawyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:22:12