コンパイラかく語りき

import { Fun } from 'programming'

Node.js v18 にアップグレードしたら storybook のビルドが通らない問題への対応(error:0308010C:digital envelope routines::unsupported)

プロジェクトの Node.js v18 にアップグレードした。 すると、storybook のビルドが通らなくなってしまった。

$ npm run storybook

「wdm」: wait until bundle finished: 
node:internal/crypto/hash:71
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/Users/.../node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/.../node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/Users/.../node_modules/webpack/lib/NormalModule.js:471:10)
    at /Users/.../node_modules/webpack/lib/NormalModule.js:503:5
    at /Users/.../node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/.../node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/.../node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/Users/.../node_modules/loader-runner/lib/LoaderRunner.js:205:4) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

以下のように npm script に NODE_OPTIONS=--openssl-legacy-provider を付与してエラーを回避した。

"scripts": {
     "storybook": "NODE_OPTIONS=--openssl-legacy-provider start-storybook -p 6006"
}

あくまで暫定対応という感じですが…。

このエラーは storybook に限らず、Node.js が関連するその他の処理でも発生するかもしれない。