はじめに
React+Vite+Supabaseで作ったアプリをFirebase Hostingデプロイしました。
CI/CDの学習のためにGitHub Actionsでgit pushされたらビルドとデプロイを自動化するワークフローを作成しました。
しかしNode.js関係のエラーでジョブが途中で止まってしまったのでその解決方法をまとめます。
エラーの原因
SyntaxError: The requested module 'node:util' does not provide an export named 'styleText'
このエラーはNode.jsの組み込みモジュールnode:utilからstyleTextが読み込めないという内容です。
styleTextは外部パッケージ(Chalkなど)をインストールしなくても、標準機能だけでコンソール出力に色や装飾を適用できる関数です。
styleTextはNode.jsのv21.7.0およびv20.12.0 (LTS)から導入されました。
ワークフローファイルに指定したNodeのバージョンがstyleText導入前だったため、このエラーが出てしまいました。
# Node.jsのバージョン18を指定していたのが原因だった
uses: actions/setup-node@v2
with:
node-version: "18"
解決方法
actions/setup-nodeに指定するNode.jsのバージョンをstyleText導入後にしました。
今回は個人開発でアプリの規模も小さいですが、Node.jsのバージョンを個別に複数箇所書いてしまうとバージョンアップを行うたびに修正が発生して面倒です。
また、開発環境とGitHub ActionsのNode.jsのバージョンを一致させて一元管理したかったので以下の記述に変更しました。
# Node.jsのバージョンをプロジェクトのpackage.jsonから取得する
uses: actions/setup-node@v7 #ついでにこちらも最新のv7に変更
with:
node-version-file: "package.json"
node-version-fileにpackage.jsonを指定します。これでプロジェクトのpackage.jsonに記載のNode.jsのバージョンが参照されます。
開発環境にViteを使用しているのでpackage.jsonにNode.jsのバージョンを記載します。私はVoltaを導入しているので本記事執筆時点のLTSである24系Node.jsのバージョンをVoltaで固定しました。
volta pin node@24
コマンドを実行すると、Viteのpackage.jsonにVoltaで固定したNode.jsのバージョンが記載されます。
{
"volta": {
"node": "24.x.x"
}
}
ここまで出来たらリモートリポジトリへpushして、ワークフローが実行出来ていれば完了です。
おわりに
想定外のエラーでしたが、フロントエンドツールは変化が早いのでNode.jsのバージョンも定期的に見直す必要があると再認識しました。
参照
