TypeError: Intl.Segmenter is not a constructor
発生の経緯
文字数を数えるChrome拡張を作成中にユニットテストを導入しようと、jsのテストライブラリmocha
でテストを書き始めたところで上記エラーが発生しました。
ちなみに作成したChrome拡張はこちら👇
Intl.Segmenter
とは?
Intl.Segmenter
はロケールに応じたテキストの分割を可能にし、文字列から意味のある項目 (文字列、単語、文) を取得できるAPIになっています。
The Intl.Segmenter object enables locale-sensitive text segmentation, enabling you to get meaningful items (graphemes, words or sentences) from a string.
MDNのWebドキュメント
詳しい挙動は@suinさんの記事に書かれていますのでそちらをご参照ください。
解決策
早速解決策です。
(僕の場合、)Nodeをバージョン16以上にアップグレードすることで解決できました。
自分はnodebrew
を使用しているので下記コマンドでアップグレードしました。
$ node -v
v14.18.1
$ nodebrew install latest
Fetching: https://nodejs.org/dist/v18.4.0/node-v18.4.0-darwin-x64.tar.gz
############################################################# 100.0%
Installed successfully
$ nodebrew use latest
use v18.4.0
$ node -v
v18.4.0
エラー原因は対応バージョン
MDNのWebドキュメントを見てわかるようにNodeではバージョン16以上でないと動作しません。
しばらくホスト環境を使っていないうちにNode(v14.18.1)がだいぶ古くなっていたようです😢
昨今のDockerでの開発ブームにより、ホスト環境のアップグレードを忘れてしまうことが多いのでみなさんバージョンには注意しましょう!