Nuxt.jsで構築したサイトをHerokuで公開していたのですが、少し前からデプロイ時にタイトルのエラーが出るようになっていたので対応方法をメモ。
補足:記事作成時点で、Open SSLの脆弱性問題でセキュリティリリースが行われるようなので、18.xへの変更は少し様子を見た方がよさそうです。
原因
Herokuでデプロイしようとした際、以下のようなログとエラーが表示されました。(一部のみ抜粋)
Resolving node version 18.x... Downloading and installing node 18.12.0... Using default npm version: 8.19.2 Error: error:0308010C:digital envelope routines::unsupported
ローカル環境のNode.jsのバージョンが16.16.0でHerokuと異なっていたので、ローカルのバージョンを合わせて試してみたところ、ローカルサーバの起動やビルドを行った際に同様のエラーが表示されました。
Error: error:0308010C:digital envelope routines::unsupported
調べたところOpenSSLのエラーのようで、今回の場合は10/19にHerokuのNode.jsのデフォルトバージョンが18.xに変更されていることが原因のようでした。
対応方法
package.jsonで以下のようにopenssl-legacy-providerオプションを追加することで、ローカル環境でもHeroku上でも動作を確認できました。
"scripts": { "dev": "NODE_OPTIONS='--openssl-legacy-provider' nuxt", "build": "NODE_OPTIONS='--openssl-legacy-provider' nuxt build", "start": "nuxt start", },
もしくはHerokuのNode.jsのバージョンを16.xに指定することでも対応できます。
package.jsonに以下を追記します。
"engines": { "node": "16.x" },
コメントが承認されるまで時間がかかります。