TypeScriptで作ったAzure Functionsで、エントリーポイントが特定できないエラーが出た時の対処方

1 min read読了の目安(約1000字

なんの記事か

TypeScriptで作ったAzure Functionsのアプリで

$ func start

を実行した結果

Stack: Error: Unable to determine function entry point. If multiple functions are exported, you must indicate the entry point, either by naming it 'run' or 'index', or by naming it explicitly via the 'entryPoint' metadata property.

となった場合の対処方法

なんのエラーか

function.jsonscriptFileで指定したファイルが複数のexportをしている場合に、Azure Functionsはどれを使えばいいかわからなくてエラーになるので、エントリーポイントを明示してあげる必要があるみたいです

対応方法

function.jsonで、エントリーポイントを明示しよう。

{
  "bindings": [
    {
      "(省略)": "(省略)"
    }
  ],
  "scriptFile": "../dist/(関数名)/index.js",
  "entryPoint": "default"
}

ちょっと待って、exportしてる関数1つだけなんだが?

意図的に何かをしない限り、index.tsでexportしている関数は、1つだけになると思う。

export default timerTrigger

それでもこのエラーは発生する。

なぜならtsをbuildした際にindex.jsで他のexportが発生することがあるから。
こんなふうに。

exports.__esModule = true;

なので、明示してあげないと、エラーになってしまうのだ!

いや、ふざけんなよ!!

これ関数ですらないし。。。
そもそも複数あったらexport defaultしてるやつを優先して見に行けよ!
TypeScriptもAzureもMicrosoftが開発してるんだから、もう少し開発しやすいように考慮してほしいです。ほんとお願いします。