JavaScriptの「関数ではありません」エラーを解決する方法

私はセミコロンなしでJavaScriptを書いています。

そして、私はそれが本当に好きです。私の意見では、言語はよりクリーンです。

あなたはそれが気に入らないかもしれません、そしてそれは理解できます。しかし、それはそうです。

セミコロンはオプションです。追加する必要はありません。

ただし、注意が必要な場合もあります。特に、Node.jsではrequire()外部モジュールとファイルをロードします。

これにより、場合によっては、次のようなエラーが発生する可能性があります。

TypeError: require(...) is not a function

That’s a weird error, right?

Let’s look at how I got it.

I required a library, and then I had to run some code at the root level and I created an immediately-invoked async function:

const fs = require('fs')

(async () => { //… })()

JS does not see a semicolon after require(), and we start a line with a (, and JS thinks we’re trying to execute a function.

It consider require('fs') as the name of the function, which is something that could actually work if the module export returned a function.

But it’s not, so we get that ...is not a function error.

How do we fix it?

We must add a semicolon. Somewhere.

This would work:

const fs = require('fs')

;(async () => { //… })()

and also this would work:

const fs = require('fs');

(async () => { //… })()

It’s a little price we have to pay to avoid the use of semicolons everywhere.

Tip: top-level await is now a thing, you can use that instead of this structure, and it will prevent such errors.


More js tutorials: