Node升级后,项目运行或打包报错
最近,突然想着把 node 升级一下,之前用的 v16.20.2 的,升级到了 v20.12.2,升级完后,打包项目,发现完犊子了,直接报错,报错信息类似这种
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:80:19)
at Object.createHash (node:crypto:139:10)
死活打包不成功。然后把 node 切回之前的版本,再次打包,发现是可以的,这下可以确定是 node 版本不兼容导致的问题,原因是 node v17 版本之后发布的 OpenSSL3.0 这个鬼东西导致的,OpenSSL3.0 对允许算法和密钥大小增加了严格的限制,因此才有这个问题。
那么怎么解决这个问题呢?
这里有两种办法解决
1、切换回之前能正常运行的 node 版本
// 使用nvm这个node版本管理工具,在需要打包老项目时,切换回老版本的node
nvm ls // 查看当前已安装的版本
nvm use 版本号 // 切换到指定的node版本,仅针对当前当次命令窗口生效
1
2
3
4
2
3
4
2、告诉 node 使用旧版 OpenSSL 来运行程序
// Linux、macOS、Git bash等命令终端运行
export NODE_OPTIONS=--openssl-legacy-provider
// Windows 命令窗口下
set NODE_OPTIONS=--openssl-legacy-provider
// 在 PowerShell 上
$env:NODE_OPTIONS = "--openssl-legacy-provider"
// 然后执行npm run build即可
npm run build
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
3、如果项目是个人开发,仅自己使用的话,也可以在 package.json 中重新配置脚本
// 记住,区分自己的开发环境是mac还是windows
"scripts": {
"dev": "export NODE_OPTIONS=--openssl-legacy-provider && vuepress dev docs --debug",
"build": "export NODE_OPTIONS=--openssl-legacy-provider && vuepress build docs",
}
1
2
3
4
5
2
3
4
5
编辑 (opens new window)
上次更新: 7/2/2024, 11:06:45 AM