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

通过PHP调用Webpack时出现内存错误问题求助

解决PHP调用Webpack时出现的Node.js内存不足问题

这个问题我碰到过好几次,核心原因是Node.js在PHP执行环境中的内存限制和你终端里的不一样——终端直接跑Webpack时,你的用户环境可能已经默认给Node分配了足够的内存,或者用的是你自己安装的Node版本(比如nvm管理的),但PHP通过shell_exec调用时,用的是服务器进程(比如www-data)的环境,默认内存限制更低,导致打包时GC(垃圾回收)频繁触发,最后出现内存不足的报错。

下面给你几个直接可行的解决方案:

1. 给Node强制指定更大的内存限制

在Webpack命令前加上NODE_OPTIONS环境变量,直接设置Node的最大可用内存,比如分配4GB内存(你可以根据实际场景调整数值,2048对应2GB,8192对应8GB):

shell_exec('NODE_OPTIONS="--max-old-space-size=4096" webpack -p --config /home/[username]/config/config.production.js 2>&1');

2. 确保PHP调用的是正确的Node版本

有时候PHP运行环境用的是系统全局的Node,和你终端里用的nvm版本不一样,导致内存限制默认值差异。你可以先在PHP里执行以下命令,查看当前环境的Node信息:

echo shell_exec('node --version && echo $NODE_OPTIONS');

把输出和你终端里执行node --version && echo $NODE_OPTIONS的结果对比,如果版本不同,就在Webpack命令里指定Node的绝对路径,比如:

shell_exec('NODE_OPTIONS="--max-old-space-size=4096" /home/[username]/.nvm/versions/node/v18.17.0/bin/node /home/[username]/node_modules/webpack/bin/webpack.js -p --config /home/[username]/config/config.production.js 2>&1');

(记得替换成你自己的Node和Webpack的实际绝对路径)

3. 优化Webpack配置减少内存占用

如果不想调整Node内存,也可以通过优化Webpack配置来降低内存消耗:

  • 开启文件系统缓存,避免重复编译:
// config.production.js
module.exports = {
  // ...其他原有配置
  cache: {
    type: 'filesystem', // 用文件系统缓存编译结果
    cacheDirectory: path.resolve(__dirname, '.webpack-cache'),
  },
};
  • 拆分公共代码,减少单次打包的模块数量:
// config.production.js
module.exports = {
  // ...其他原有配置
  optimization: {
    splitChunks: {
      chunks: 'all', // 拆分所有类型的chunk
    },
  },
};

你看到的那些Scavenge日志是Node的垃圾回收记录,说明Node一直在努力释放内存但还是不够,上面的方法应该能帮你解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:10:49