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"
  },
				
コメントが承認されるまで時間がかかります。