Что делать с ошибкой "is not a function"
как поступать с ошибкой "is not a function" в JavaScript
Многие разработчики не используют точку с запятой при написании кода, видимо, потому, что так удобно. Возможно, такой код легче читается. С другой стороны, не меньшее количество программистов придерживается синтаксиса с замыкающей точкой с запятой. Такая позиция тоже понятна и имеет право на существование. В конце концов, каждый веб-разработчик выбирает свой уникальный путь. Что касается точки с запятой - в настоящее время, как Вы уже поняли, в JavaScript этот знак не является обязательным.
Тем не менее, синтаксис без точек с запятой требует от программиста дополнительного внимания, особенно в Node,js, где функция require()
применяется для подключения внешних модулей и файлов.
В некоторых случаях можно столкнуться с такой ошибкой:
TypeError: require(...) is not a function
Странная ошибка, не так ли?
Давайте разберем, почему она появляется.
Например, я подгружаю в свой код какую-то библиотеку и следом пишу немедленно вызываемую асинхронную функцию:
const fs = require('fs')
(async () => {
//...
})()
Итак, JavaScript не находит точку с запятой после require()
, а следующая строка начинается с открывающей скобки. В результате, JavaScript считает, что мы пытаемся запустить функцию и принимает require('fs')
за имя функции. Возможно для кого-то это будет открытием, но такой синтаксис может сработать если require('fs')
действительно возвращает функцию. Но чаще всего результатом является не функция, поэтому мы получаем ошибку:
TypeError: require(...) is not a function
Как же избежать такой ошибки?
Итак, в некоторых местах все-таки придется добавить точку с запятой.
Например, такой подход будет работать:
const fs = require('fs')
;(async () => {
//...
})()
и такой тоже:
const fs = require('fs');
(async () => {
//...
})()
Возможно, это небольшая цена, которую приходится платить за код без точек с запятой.
Спасибо за внимание.