218 文字
1 分
node 18 upgrade error
2022-12-06

Node.js v16からNode.js v18にアップグレードしたらエラーが出ました。

node:internal/crypto/hash:71
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (/app/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/app/node_modules/webpack/lib/NormalModule.js:417:16)
at /app/node_modules/webpack/lib/NormalModule.js:452:10
at /app/node_modules/webpack/lib/NormalModule.js:323:13
at /app/node_modules/loader-runner/lib/LoaderRunner.js:367:11
at /app/node_modules/loader-runner/lib/LoaderRunner.js:233:18
at context.callback (/app/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
at /app/node_modules/babel-loader/lib/index.js:59:103 {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v18.12.1

Node.js v17に入った問題ようです。以下の環境変数をセットすれば回避できます。

Terminal window
NODE_OPTIONS=--openssl-legacy-provider

docker-composeでnodeやwebpackを使っている場合は以下の設定をdocker-compose.ymlへ追加すれば回避できます。

environment:
NODE_OPTIONS: --openssl-legacy-provider

原因#

webpackがbabelを使っていて、babelが参照しているライブラリ内でOpenSSL 3.0の今はサポートされていないアルゴリズムかキーサイズのオプションを利用しようとした場合に出るようです。

考察#

はやく、webpackerとbabelから脱却しないとですな。。。

Webpacker has been retired

https://github.com/rails/webpacker

node 18 upgrade error
https://blog.teraren.com/posts/node-18-upgrade-error/
作者
Yuki Matsukura
公開日
2022-12-06
ライセンス
CC BY-NC-SA 4.0

コメント