升级 node.js 后,编译时报错error:0308010C:digital envelope routines::unsupported

在升级到Node.jsv17及以上版本后,由于OpenSSL3.0的更改导致编译错误0308010C。为了解决这个问题,可以在package.json的启动脚本中添加`NODE_OPTIONS=--openssl-legacy-provider`,这允许使用旧的加密提供者,从而避免编译错误。通过修改这个设置,可以成功运行npmrunwatch并进行编译。

系统重装成 win11, node.js 也安装成了最新的 v18.13.0 , 修改基于laravel 的 lims 系统,想重新编译,然后报错 error:0308010C:digital envelope routines::unsupported:

e:\e-lims> npm run watch

> watch
> mix watch
......
node:internal/crypto/hash:71
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
......
Node.js v18.13.0

出现这个错误的原因,是 node.js V17版本后使用了OpenSSL3.0, OpenSSL3.0对允许算法和密钥大小增加了严格的限制,改变了md族(包括md4)的初始化上下文的代码,这是一个破坏性的更改。

解决的方案之一是修改 package.json 中的相关脚本

原部分脚本为:

{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "mix",
        "watch": "mix watch",
        "watch-poll": "mix watch -- --watch-options-poll=1000",
        "hot": "mix watch --hot",
        "prod": "npm run production",
        "production": "mix --production"
    },
......
}

启动脚本前,设置NODE_OPTIONS,这不是一个推荐的方法,但可以解决问题

{
    "private": true,
    "scripts": {
        "dev": "set NODE_OPTIONS=--openssl-legacy-provider && npm run development",
        "watch": "set NODE_OPTIONS=--openssl-legacy-provider && mix watch",
        
    },
......
}

再次运行 npm run watch ,可顺利编译。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值