← flaviocopes.com

How to solve the "is not a function" error in JavaScript

Published May 01 2020

Psssst! The 2023 WEB DEVELOPMENT BOOTCAMP is starting on FEBRUARY 01, 2023! SIGNUPS ARE NOW OPEN to this 10-weeks cohort course. Learn the fundamentals, HTML, CSS, JS, Tailwind, React, Next.js and much more! ✨

I write JavaScript without semicolons.

And I really like that. The language is cleaner, in my opinion.

You might not like that, and it’s understandable. But that’s the way it is.

Semicolons are optional. We are not required to add them.

Sometimes, however, we must pay attention. In particular, in Node.js we use require() to load external modules and files.

This can cause, in some cases, an error like this:

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.

I write books for developers 👇🏼

© 2023 Flavio Copes Flavio Copes made in Italy 🇮🇹 using Notion to Site Notion to Site