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に入った問題ようです。以下の環境変数をセットすれば回避できます。
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
Comments