エラーの発生契機
エラーの種類は以下
error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Proxy.createHash (node:crypto:133:10) at module.exports (node_modules/webpack/lib/util/createHash.js:135:53) at NormalModule._initBuildHash (node_modules/webpack/lib/NormalModule.js:417:16) at node_modules/webpack/lib/NormalModule.js:452:10 at node_modules/webpack/lib/NormalModule.js:323:13 at node_modules/loader-runner/lib/LoaderRunner.js:367:11 at node_modules/loader-runner/lib/LoaderRunner.js:233:18 at context.callback (node_modules/loader-runner/lib/LoaderRunner.js:111:13) at node_modules/babel-loader/lib/index.js:55:103 node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen);
ほとんどの方はnode.jsのバージョンアップで発生するエラーになると思います。
私の場合はnode.jsを2023年7月時点の最新である18.7.0にバージョンアップした時に発生しました。
解消方法1
解消方法としては様々ですが、とりあえずNODE_OPTIONSという変数に--openssl-legacy-providerという値を設定すればよさそう。
私は以下のようにpackage.jsonのscriptsに以下のようにNODE_OPTIONS='--openssl-legacy-provider'を入れれば解決しました。
"scripts": { "dev": "cross-env NODE_SERVER=\"localhost\" NODE_OPTIONS='--openssl-legacy-provider' nuxt", "build": "cross-env NODE_SERVER=\"localhost\" NODE_OPTIONS='--openssl-legacy-provider' nuxt build" }
解消方法2
ちなみに以下の設定を.bashrcや.zshrcに環境変数として設定する方法もあります。
export NODE_OPTIONS=--openssl-legacy-provider
しかしこの方法は欠点があり、同一PCで旧バージョンのnode.jsを使用する可能性がある場合に以下のようなエラーが出てしまい、
node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
unset NODE_OPTIONS
などしなければいけなくなり、少々面倒です。