慕雪的小助手正在绞尽脑汁···
慕雪小助手的总结
DeepSeek & LongCat

本文记录了将vuepress-theme-vdoing更新站点评论artalk版本到2.9.1时遇到的ERR_OSSL_EVP_UNSUPPORTED编译报错以及解决办法

1. 说明

这次更新hexo butterfly主题的时候,顺带更新了artalk评论系统的版本。目前我的artalk评论系统还有另外一个站点在用,也就是KOOK语音软件机器人SDK khl.py的文档站点:

https://khl-py.eu.org/使用的是vuepress-theme-vdoing框架,为了让更新后的artalk评论系统在这个站点上依旧可用,需要更新vuepress使用的评论系统版本。

2. 更新

由于站点本身并不需要更新,只是需要引入新版本的评论系统插件,所以只需要修改一下packages.json里面的vuepress-plugin-vdoing-comment插件版本就可以了,升级到最新的1.3.0

1
"vuepress-plugin-vdoing-comment": "^1.3.0"

升级了之后,删除本地node_modulespackages-lock.json文件,重新安装

1
2
rm -rf node_modules packages-lock.json
npm install --save

安装自然是成功的,没有出现问题。

3. 报错和解决

3.1. 报错

使用npm run dev开启预览的时候,出现了编译报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
● Client █████████████████████████ compiling (0%)  


ℹ 「wds」: Project is running at http://0.0.0.0:8080/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: Content not from webpack is served from /Users/mothra/data/hexo/khl.py.docs/docs/.vuepress/public
ℹ 「wds」: 404s will fallback to /index.html
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at module.exports (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:471:10)
at /Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:503:5
at /Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:358:12
at /Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
at /Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:236:3
at runSyncOrAsync (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
at iterateNormalLoaders (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
at Array.<anonymous> (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
at Storage.finished (/Users/mothra/data/hexo/khl.py.docs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
at /Users/mothra/data/hexo/khl.py.docs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
node:internal/crypto/hash:79
this[kHandle] = new _Hash(algorithm, xofLen, algorithmId, getHashCache());
^

Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at module.exports (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:471:10)
at /Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:503:5
at /Users/mothra/data/hexo/khl.py.docs/node_modules/webpack/lib/NormalModule.js:358:12
at /Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at Array.<anonymous> (/Users/mothra/data/hexo/khl.py.docs/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
at Storage.finished (/Users/mothra/data/hexo/khl.py.docs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
at /Users/mothra/data/hexo/khl.py.docs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
at /Users/mothra/data/hexo/khl.py.docs/node_modules/graceful-fs/graceful-fs.js:123:16
at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read/context:68:3) {
opensslErrorStack: [
'error:03000086:digital envelope routines::initialization error',
'error:0308010C:digital envelope routines::unsupported'
],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v20.18.0

3.2. 解决

报错的直接原因是ERR_OSSL_EVP_UNSUPPORTED,问了AI,这个问题是因为新版本的npm不支持老版本的openssl,需要设置环境变量绕过这层检查,才可以正常部署。

需要修改packages.json里面的scripts部分,在原本的dev命令之前,都加上一个export NODE_OPTIONS=--openssl-legacy-provider环境变量设置的操作,让npm使用老版本的openssl兼容机制,这样就不会出现问题了。

1
2
3
4
"scripts": {
"dev": "export NODE_OPTIONS=--openssl-legacy-provider && vuepress dev", // Mac/Linux
"dev:win": "set NODE_OPTIONS=--openssl-legacy-provider && vuepress dev" // Windows
}

设置之后,再次运行npm run dev,站点预览正常。

image.png

3.3. 提醒:按需添加

注意,这个环境变量只有在出现了ERR_OSSL_EVP_UNSUPPORTED问题的时候才需要添加,如果你是使用Netlify或者Vercel部署你的站点,可能不会有这个报错,此时不要添加这个环境变量!

比如下图,使用Netlify部署的时候添加了这个环境变量,提示不支持--openssl-legacy-provider这个选项。不添加环境变量,反而能正常构建部署。

image.png