ESlint потрясающий. Это позволяет нам писать красиво отформатированный код Javascript и предотвращать множество синтаксических и семантических ошибок. Излишне говорить, что вы можете подготовить свое рабочее пространство, просто запустив eslint --init
. Библиотека сгенерирует конфигурацию по умолчанию, которая подходит большинству разработчиков, не так ли? Что ж, я думаю, что есть по крайней мере одно правило, которое следует настроить, если вы хотите сделать свой код более чистым и более удобным в обслуживании.
Код похож на книгу. Читаем его вниз, шаг за шагом следуя заявленным командам. Тем не менее, есть некоторые отличия. Авторам не нужно объявлять каждое слово, которое используется в романе, во введении. Но вот что такое программирование.
Мы не можем ссылаться на song
перед назначением, это привело бы к ReferenceError
. Но если бы мы это сделали, мы бы не узнали об этом, пока кто-нибудь не попробовал сыграть в нее. Javascript не является компилируемым языком, поэтому большинство ошибок остаются незамеченными до тех пор, пока выполнение не дойдет до точки неисправности. Вот и наступает момент, когда приходит ESlint! Есть полезное правило под названием no-use-before-define
, которое активировано по умолчанию. Он проверяет, была ли уже определена переменная, на которую вы ссылаетесь.
Как видите, ESlint не позволяет Javascript иметь обратный эффект. Но есть и темная сторона. Что я имею в виду? Давайте посмотрим на другой пример.
Этот код правильный, потому что функции в Javascript имеют ту же область видимости, что и объявление с ключевым словом var
. Вы можете обратиться к одному из них, даже если он определен под вызывающим кодом, и так оно и должно быть. Когда вы объявляете функции сверху вниз по их использованию, легко читать код и понимать поток. Более того, этот подход рекомендован «Чистым кодом» Мартина.
Но вот сюрприз. Правило ESlint no-use-before-define
не позволяет нам вызывать функции, объявленные после его использования. Мы получим ту же ошибку, что и при обращении к необъявленному song
. Если мы хотим исправить эту ошибку, мы можем реорганизовать наш код и изменить порядок функций.
Этого хочет от нас ESlint. Этот фрагмент кода более понятен, чем предыдущий? Я сомневаюсь. И я думаю, что вы тоже. Представьте, что кто-то просматривает наш пул-реквест. Если кто-то хотел понять, что происходит, ему нужно было бы прокрутить страницу вниз, чтобы сначала проверить точку входа. После этого они, вероятно, будут просматривать функции друг друга снизу вверх. Видимо, неудобно. Но, к сожалению, это политика конфигурации ESlint по умолчанию.
В любом случае, какое решение? Что ж, мы могли бы просто деактивировать no-use-before-define
правило. Но это также привело бы к возможным ошибкам с переменными. Надеюсь, есть способ получше.
Вот и все! Теперь ESlint позволяет нам упорядочивать функции, как нам нравится. Правило также можно отключить для классов (да, проверяет и классы). Более подробную информацию вы можете найти по этой ссылке.
Заключение
Я надеюсь, что вы узнали что-то новое о ESlint. Я считаю, что предпочтительная конфигурация может быть не такой «предпочтительной» в реальном мире. Итак, не стоит слишком полагаться на свое мнение о том, что правильно. Даже мой. Возможно, вы думаете, что я ошибаюсь. Если это так, я хотел бы обсудить статью в разделе комментариев. Спасибо за чтение!