発生環境
- Windows11/MacOS Sonoma
- Node.js 20系全て
- SWA CLI バージョン問わず
回避策
急いでいる人向けです。原因は Azure SWA CLI のバグなので、強引に直す必要があります。func-core-tools.js ファイルをエディタで開きます。
Windowsの場合(youraccountは自分のものに修正してください)
- C:\Users\youraccount\AppData\Roaming\npm\node_modules@azure\static-web-apps-cli\dist\core\func-core-tools.js
MacOS の場合はどんなツールでどこに Node.js をインストールしたのか次第でパスが異なります。私の場合は Homebrew で Node.js をインストールしていたので、次の場所でした。
- /opt/homebrew/lib/node_modules/@azure/static-web-apps-cli/dist/core/func-core-tools.js
次の箇所を直します。41行目ぐらいです。
function isCoreToolsVersionCompatible(coreToolsVersion, nodeVersion) {
// Runtime support reference: https://docs.microsoft.com/azure/azure-functions/functions-versions?pivots=programming-language-javascript#languages
switch (coreToolsVersion) {
case 4:
- return nodeVersion >= 14 && nodeVersion <= 18;
+ return nodeVersion >= 14 && nodeVersion <= 20;
case 3:
return nodeVersion >= 10 && nodeVersion <= 14;
case 2:
return nodeVersion >= 8 && nodeVersion <= 10;
default:
return false;
}
}
保存すれば問題なく動作するようになります。SWA CLI をアップデートすると、このファイルは元に戻ってしまいますので、また同じ修正をしてください。
エラー発生
久しぶりに Azure Static Web Apps CLI 使って React + Azure Functions アプリをローカルで動かそうとしたらこんなエラーが出るようになって焦りました。
✖ Found Azure Functions Core Tools v4 which is incompatible with your current Node.js v20.10.0.
✖ See https://aka.ms/functions-node-versions for more information.
何やら非対応のバージョンでも使っているかのようなエラーです。確認すると、
Node.js 20.x はサポートされていますね。変ですね。
自力で色々やっても解決できず、検索していたら回避策の記載を見つけましたので共有します。こちらのスレッドがこの件についての issue と回避策が書いてあります。
SWA CLI 実行時に Azure Functions Core Tools を使用する場合はインストールしてある Node.js とのバージョンチェックをかける箇所があり、そこで Node.js のバージョンは 18 以下ではないとダメ、となっているのです。
func-core-tools.js ファイルの中に次のように実装されています。
function isCoreToolsVersionCompatible(coreToolsVersion, nodeVersion) {
// Runtime support reference: https://docs.microsoft.com/azure/azure-functions/functions-versions?pivots=programming-language-javascript#languages
switch (coreToolsVersion) {
case 4:
return nodeVersion >= 14 && nodeVersion <= 18;
case 3:
return nodeVersion >= 10 && nodeVersion <= 14;
case 2:
return nodeVersion >= 8 && nodeVersion <= 10;
default:
return false;
}
}
case 4 の時、つまりAzure Functions Core Tools のバージョンが4の時の Node.js のバージョンは 14 以上18 以下、と実装されています。この 18 を 20 に変更して保存すれば良いのです。
このファイルの場所については上に記載しておいたのでそちらをご確認ください。
いつ直るのか
こちらの issue は 2023 年 10 月にオープンして、半年ほど経過した 2024 年 4 月の現在もまだ修正バージョンがリリースされていません。
いつ直るのか全く見込みが立っていないので、しばらくはこの方法で回避するしかなさそうです。