كيفية حل خطأ "ليست دالة" في 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: