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

Laravel Mix执行prod打包报错:NODE_OPTIONS的--openssl-legacy-provider无效

故障解决方案

这个错误是生产模式触发代码压缩时,Terser插件启动的Node Worker线程不允许NODE_OPTIONS环境变量中携带--openssl-legacy-provider参数导致的,开发模式默认不启动压缩流程因此不会触发报错,可按以下优先级尝试修复:

  • 方案1:临时清空NODE_OPTIONS执行打包
    直接在打包命令前清空环境变量即可绕过校验,Linux/macOS执行:
    NODE_OPTIONS="" yarn run prod
    
    Windows cmd执行:
    set NODE_OPTIONS=&& yarn run prod
    
    Windows PowerShell执行:
    $env:NODE_OPTIONS=""; yarn run prod
    
  • 方案2:将openssl参数从全局环境变量移到脚本启动参数
    如果你确实需要--openssl-legacy-provider参数解决加密兼容问题,不要把它放在全局NODE_OPTIONS里,改成直接附加到打包命令的Node启动参数上,修改package.json中的生产构建脚本:
    {
      "scripts": {
        "prod": "node --openssl-legacy-provider node_modules/laravel-mix/bin/cli.js --production"
      }
    }
    
    这样参数只会传给构建主进程,不会传递给Worker线程,不会触发校验。
  • 方案3:调整Node.js版本
    这个参数校验问题仅出现在部分Node.js 17/18的早期小版本中,两种选择都可以解决:
    • 降级到Node.js 16.x LTS版本,该版本默认使用OpenSSL 1.1.1,不需要额外加--openssl-legacy-provider参数
    • 升级到Node.js 18.12以上的LTS版本,该版本已经修复了Worker线程对这个参数的校验限制
  • 方案4:关闭Terser的多线程压缩
    不想调整Node版本和环境变量的话,可以在Webpack配置(或Laravel Mix的webpack.mix.js)中关闭Terser的多线程模式,避免启动Worker线程:
    const TerserPlugin = require('terser-webpack-plugin');
    
    mix.webpackConfig({
      optimization: {
        minimizer: [
          new TerserPlugin({
            parallel: false
          })
        ]
      }
    });
    
    该方案唯一影响是生产构建速度会有所下降。

内容的提问来源于stack exchange,提问作者Deák Zsolt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:45:05