В Node.js как заметить недостающую функцию?

#node.js #undefined

#node.js #неопределенный

Вопрос:

В некоторых Node.js , у меня было

 function examp() {
    ..
    blah = bestAvailableDelauneySlot()
    ..
}
 

Однако функция bestAvailableDelauneySlot вообще не существовала.

(В моем случае я по глупости забыл ввести модуль, так что так и должно было быть blah = triangles.bestAvailableDelauneySlot() ..)

Теперь, код

   blah = bestAvailableDelauneySlot()
 

вообще не создает никаких ошибок, пока по какой-либо причине examp не вызывается во время выполнения. (Что случается только в непонятных ситуациях, раз в неделю).

VSCode вообще не говорит мне, что нет определения для bestAvailableDelauneySlot . «использование строгого режима», похоже, не помогает.

Как, черт возьми, защититься от неопределенного имени функции??

Простая опечатка

 blah = triangles.bestAvailableDelauneySlozz()
 

и крах. Решение?

Возможно, в идеале что-то, что интегрирует w / VSCode?

(Кстати, я обычно использую VSCode на Mac… возможно, в этом-то и проблема: O)

Комментарии:

1. решение состоит в том, чтобы провести тесты или, по крайней мере, проверить, что неясный код все еще выполняется перед слиянием

2. @LawrenceCherone — удивительно; значит, нет общего пакета, инструмента или чего-то еще, что выявляло бы такие вероятные проблемы ?!?! спасибо.

3. Как вы можете быть уверены, что этот метод не существует? Он может быть создан во время выполнения.

4. @xehpuk — конечно, точно так же, как вызов функции, начинающейся с обычного текста или тому подобного на более строго защищенном языке. Однако кажется невероятным, что нет инструмента, который, например, как вы предлагаете, предупреждал бы о том, что «ЭТА ФУНКЦИЯ ДОЛЖНА БЫТЬ СОЗДАНА ВО ВРЕМЯ ВЫПОЛНЕНИЯ»… ты знаешь?! Я никогда не видел IDE, которая этого не делала бы; может быть, мне просто нужна другая IDE или что-то в этом роде ?!? спасибо еще раз

5. … но взгляните на ЭСЛинт .

Ответ №1:

Инструмент ESLint является стандартом де-факто для проверки наличия проблем в коде JavaScript.

В вашем конкретном случае правило no-undef сообщит о необъявленной функции.

Существует также расширение для Visual Studio Code с более чем 12 миллионами загрузок:

ESLint для кода Visual Studio, примененного к примеру

Комментарии:

1. правило «no_undef» — какой невероятный совет. Спасибо. не могли бы вы сказать, что я могу использовать «правило no_undef» в варианте VSCode?? баунти в пути …

2. @Fattie Я не являюсь постоянным пользователем VSC, но он должен работать просто отлично, если проект настроен правильно. Я добавил скриншот с вашим примером.

Ответ №2:

Я хочу предложить два метода. Я надеюсь, что это могло бы вам помочь. Более подробно в разделе Проверка типов JavaScrip.
Примечание: это vscode.

Первый

Вы могли бы просто добавить // @ts-check заголовок файла для проверки. Перед добавлением // @ts-check он не сообщает вам об ошибке (bestAvailableDelauneySlot не существует).

введите описание изображения здесь

Затем вы добавите // @ts-check , и он скажет вам, что его не существует.

введите описание изображения здесь

Затем вы объявляете функцию, ошибка исчезает.

введите описание изображения здесь

Если вы допустите какую-то опечатку, появится сообщение об ошибке.

введите описание изображения здесь

И это также работает в module.exports и require. Нет // @ts-check .

введите описание изображения здесь

Добавить // @ts-check .

введите описание изображения здесь

Второй

Если вы не хотите добавлять //@ts-check по каждому файлу, вы можете создать jsconfig.json в корне проекта, чтобы включить проверку целых файлов с добавлением checkJs jsconfig.json . Его эффект такой же, как при добавлении //@ts-check во все файлы.

 {
    "compilerOptions": {
        "checkJs": true
    },
    "exclude": ["node_modules", "**/node_modules/*"]
}