Espress
2021 December 7th

Node.jsをアップデートしたらエラーが発生し、強制終了する

Node.jsのバージョンを17へアップデート後、いつも通りnpm run devすると見たことないエラー文が出てきました。

profile icon
written by スズキ ハルヤ
article image

はじめに

私は普段、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以前へダウングレードするのも一つの手かもしれませんね。

この記事がお役に立てば幸いです。

introduction image

- Introduction -

Espressの成り立ちとデジタルクリエイティブにおける想い

introduction image

多くの情報が乱立する中、Espressは記事を読んでくださる皆様に、より良い情報と価値のあるコンテンツをお届けしたいと考えています。また、企業や事業主が掲げる目標達成の手助けをサイト利用者の利便性を捉え、ブランドと読者のより良い結びつきを作ります。

詳しくみる