2021 December 7th
Node.jsをアップデートしたらエラーが発生し、強制終了する
Node.jsのバージョンを17へアップデート後、いつも通りnpm run devすると見たことないエラー文が出てきました。
はじめに
私は普段、Next.jsを使用しているのですが、nodeをアップデートしnpm run devを実行したら、その直後にエラーが発生し強制終了してしまったので解決策を調べてみました。
開発環境
Node.js v17.0.1
npm v8.1.0
macOS BigSur
参考記事
nodejs 17: digital envelope routines::unsupported #14532
エラー文
node:internal/crypto/hash:67
this[kHandle] = new _Hash(algorithm, xofLen);
Error: error:0308010C:digital envelope routines::unsupported
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
解決方法
package.json内のscriptsを以下の様に編集。
最初はbuildにNodeのオプションをつけていたのですが、vercelへのデプロイが上手くいかなかったので新しくlegacy-buildを作成し、通常のbuildとは切り離して考えています。
"scripts": {
"dev": "export NODE_OPTIONS=--openssl-legacy-provider; next dev",
"build": "next build",
"legacy-build: "export NODE_OPTIONS=--openssl-legacy-provider; next build",
// start等は省略
}
なぜ、エラーが発生したのか
Node.jsはバージョン17以降、OpenSSLが1.1.0から3.0.0にアップデートしました。
そのためにnode v16以前で機能していたOpenSSLとは互換性がなく、今回のようなエラーが発生してしまったようです。
まとめ
今回は開発環境立ち上げ時とビルド時の処理としてOpenSSLのレガシープロバイダーを利用するオプションを記述してありますが、v17が落ち着くまでの間、v16以前へダウングレードするのも一つの手かもしれませんね。
この記事がお役に立てば幸いです。