Herokuでデプロイ時に「error:0308010C:digital envelope routines::unsupported」と出て失敗する

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"
  },

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2023年2月
 1234
567891011
12131415161718
19202122232425
262728