
webpackでのエラー
node:internal/crypto/hash:67
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
(略)
59:103 {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}Docker環境下で開発中にnpm run devを実行した際に起きたエラー。
解決手段
Node.js v17.x で ERR_OSSL_EVP_UNSUPPORTED エラー
上記githubフォーラムにて「Node.js v17 で OpenSSL 3.0 を含む形に変わったことに起因する」とのことなので、とりあえずnodebrewを使ってv16に下げることにした。
Node.js v16にダウングレード
$ nodebrew ls-remote上記のコマンドにてバージョン一覧を出力します。
v0.0.1 v0.0.2 v0.0.3 v0.0.4 v0.0.5 v0.0.6
v0.1.0 v0.1.1 v0.1.2 v0.1.3 v0.1.4 v0.1.5 v0.1.6 v0.1.7
v0.1.8 v0.1.9 v0.1.10 v0.1.11 v0.1.12 v0.1.13 v0.1.14 v0.1.15
v0.1.16 v0.1.17 v0.1.18 v0.1.19 v0.1.20 v0.1.21 v0.1.22 v0.1.23
v0.1.24 v0.1.25 v0.1.26 v0.1.27 v0.1.28 v0.1.29 v0.1.30 v0.1.31
v0.1.32 v0.1.33 v0.1.90 v0.1.91 v0.1.92 v0.1.93 v0.1.94 v0.1.95
v0.1.96 v0.1.97 v0.1.98 v0.1.99 v0.1.100 v0.1.101 v0.1.102 v0.1.103
v0.1.104
(略)
v16.0.0 v16.1.0 v16.2.0 v16.3.0 v16.4.0 v16.4.1 v16.4.2 v16.5.0
v16.6.0 v16.6.1 v16.6.2 v16.7.0 v16.8.0 v16.9.0 v16.9.1 v16.10.0
v16.11.0 v16.11.1 v16.12.0 v16.13.0 v16.13.1 v16.13.2 v16.14.0
v17.0.0 v17.0.1 v17.1.0 v17.2.0 v17.3.0 v17.3.1 v17.4.0 v17.5.0
v17.6.0 v17.7.0 v17.7.1v16の中で一番新しいのがv16.14.0なので、このバージョンを使いたいと思います。
$ nodebrew install-binary v16.14.0インストールできたかを確認する。
$ nodebrew ls上記コマンドにて出力された結果が、下記の利用可能なバージョン一覧になります。
v12.16.1
v16.7.0
v16.14.0
v17.3.0
current: v17.3.0現在はv17.3.0なので、次はこれをv16.14.0にします。
nodebrewでバージョン切り替え
$ nodebrew use v16.14.0上記コマンドにてバージョンを切り替えます。
先ほどのcurrent: v17.3.0の部分に変化があったか確認してみます。
$ nodebrew lsv12.16.1
v16.7.0
v16.14.0
v17.3.0
current: v16.14.0current: v16.14.0に変わっていることが確認できました。
ERR_OSSL_EVP_UNSUPPORTEDエラーは解決
当初の目的であるnpm run devは問題なく実行できるようになりました。
なお、今回はとにかく開発を前に進めたかったので、Node.jsのバージョンを下げるということを選択しましたが、他にも「webpack.config.js」に「hashFunction: “xxhash64″」を追加する方法や環境変数に「export NODE_OPTIONS=–openssl-legacy-provider」を設定する方法もあります。
また、バージョンの切り替えについては、今回「nodebrew」を使用しましたが「n」や「nodenv」「nvm」といったバージョン管理ツールがありますので、是非使ってみてください。


Be the first to comment