CI/CDの一部として使用しているAzure piplines のビルドエージェントで使用しているnodeのバージョンが知らないうちにv16からv18になっており
下記のエラーによりNuxtプロジェクトのbuidに失敗していた
node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen); Error : error : 0308010C:digital envelope routines::unsupported... . . . at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' } Node.js v18.14.0
Node v17からOpenSSL3に対応した過程で、一部の推奨されないアルゴリズムに対して制約がかけられたのが原因とのこと
node/CHANGELOG_V17.md at main · nodejs/node · GitHub
対応としては
- 使用するnodeをv16にダウングレード
--openssl-legacy-provider
を使用して古いプロバイダーを使用する
のどちらかが必要
今回は緊急回避的に、後者で対応
build時のオプションにNODE_OPTIONS=--openssl-legacy-provider
を追加する
package.json
{ "scripts": { "build": "NODE_OPTIONS=--openssl-legacy-provider nuxt build" } }
また、Windows環境を考慮するのであれば
コマンドがSET NODE_OPTIONS=--openssl-legacy-provider
と異なるので
その差分を吸収するためにcross-env
を使用
cross-env - npm (npmjs.com)
npm install --save-dev cross-env
cross-envを使用してNODE_OPTIONSを設定する
package.json
{ "scripts": { "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider nuxt build" } }
でBuildが通るはず