タイトルのまんまですが、nuxt-create-app
で適当にプロジェクトを作ってnpm run dev
したらいきなり下記のエラーになった。Nodeのバージョンは 17.5.0。
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' }
なんだかOpenSSL関連っぽい感じ。とりあえずエラーメッセージでググって上から10個くらい記事を読んでみると、Node 17 からOpenSSL 3 が使われるようになり、Webpack 4 内部で使ってるハッシュアルゴリズム (md4?) がサポートされなくなったのが原因らしい。package-lock.json
を見ると"webpack": "^4.46.0"
だったのでなるほどという感じ。ちなみにWebpack 5 でもダメだとか。
ちゃんと調べてないけど、下記のコメントを見る限り Webpack 6 ではハッシュアルゴリズムを変えてくれるらしい。
Webpack 6 が出てNuxtのdependencyが更新されるまでの間どうすりゃいいのよ?というと、
- node起動時に
--openssl-legacy-provider
をつけるか、export NODE_OPTIONS=--openssl-legacy-provider
で環境変数にセットしておく - webpackの設定に
output.hashFunction: "xxhash64"
を追記する - LTS version のNodeを使う (現時点だと 16.14.2)
のどれかでいけるらしい。とりあえずNodeのバージョンを 16.14.2 に下げたら動きました。なかなか難儀な話だなぁ。
教訓としては、特にこだわりがなければ日頃からLTS使っとけってところでしょうか。
参考