事象 : jestでテストを実行したらreplaceAllメソッドで怒られた
$ yarn jest hogedetail
yarn run v1.22.19
# ...省略...
TypeError: this.hogeCode.replaceAll is not a function
104 | computed: {
105 | bookThumbnailUrl() {
> 106 | return `https...省略.../${this.hogeCode.replaceAll('-', '')}`
| ^
107 | }
108 | },
109 |
原因 : Node.jsのバージョンがreplaceAllに対応していないから
replaceAllはNode.jsのv15.0.0以上でないと対応していないのでした。
参考 : String.prototype.replaceAll() - JavaScript | MDN
# Node.jsのバージョンはv14でした。
$ node -v
v14.21.1
失敗した対応 : Error: error:0308010C:digital envelope routines::unsupported
じゃ、最新にしよう!と思い、https://nodejs.org/ja/ の推奨版であるv18.12.1(2022-11-29時点)にしてみたところ・・・
webpackにある「digital envelope routines」というライブラリでNode.jsのバージョンが新しすぎてエラーになりました。
$ yarn dev
yarn run v1.22.19
# ...省略...
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 (/app/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/app/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/app/node_modules/webpack/lib/NormalModule.js:471:10)
at /app/node_modules/webpack/lib/NormalModule.js:503:5
at /app/node_modules/webpack/lib/NormalModule.js:358:12
at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at Array.<anonymous> (/app/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
at Storage.finished (/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
at /app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
at /app/node_modules/enhanced-resolve/node_modules/graceful-fs/graceful-fs.js:123:16
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.12.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
nodejs 17: digital envelope routines::unsupported · Issue #14532 · webpack/webpackをみるとv17.0.0はエラーになるようで、
「 Error: error:0308010C:digital envelope routines::unsupported 」 の対処法をみるとv16.15.1は問題ないもよう。
成功した対応 : ライブラリが使える程度にNode.jsのバージョンを上げる
以下を条件にv16.18.1を選んで、問題なく解決です。
- replaceAllを使うにはv15.0.0以上
- webpackにある「digital envelope routines」を使うにはv17.0.0未満
# Node.jsのバージョン
$ node -v
v16.18.1
# jestのテストが動いた!
$ yarn jest hogedetail
yarn run v1.22.19
# ...省略...
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 1 obsolete, 0 total
Time: 10.364 s
# 起動も問題なし!
$ yarn dev
# ...省略...
✔ Client
Compiled successfully in 18.94s