Чому автоматичні імпорти будь-де це жахлива ідея 💩

Передмова

Цей довгочит не містить об’єктивності або глибокого занурення в проблематику чи архітектуру.

Це трансляція страждань, волання та болю розробника який зіштовхнувся з жахливою ідеєю яка захоплює спільноту.

Їжачок кричить на землю (@hedgehogsScream) / Twitter

Волання

Сьогодні в середовищі виконання🚩 я отримав помилку:

Invalid value used as weak map key

Якщо ви не знаєте, ця помилка виникає, якщо ДЕСЬ у вашому додатку nuxt використовується компонент, який насправді не зареєстровано.

Nuxt не показує цієї помилки на етапі компіляції. Ні, він успішно компілює весь додаток. А потім, при відвідуванні сторінки в продакшені сервер вилітає з помилкою з кодом 500 "Invalid value used as weak map key".

Nuxt production-ready🫠🙃
Nicolas Cage expresses 'frustration' with Cage rage internet meme | Nicolas  Cage | The Guardian

До цієї помилки призвело те, що я видалив один файл з компонентом. В нормальних умовах, якби використовувався явний імпорт, IDE показала б мені, що цей компонент десь використовується і не дозволила б мені його видалити, оскільки це б зламало додаток.

Або, якби я перейменував файл компонента, він би автоматично перейменувався у всіх імпортах по всьому проєкту, де використовується цей компонент.

Однак автоімпорт унеможливлює будь-який аналіз коду. Ви не маєте видимого зв'язку між тегом/функцією/змінною/класом і вихідним файлом. Ви можете переміщувати/модифікувати/видаляти файли, і IDE не зможе сказати вам, що щось піде не так.

Автоімпорт нагадує мені епоху, коли все в JavaScript було оголошено як глобальні змінні. Рефакторити подібний код було вкрай болісно. І жодні розумні інструменти, які існують зараз, не допомогли б.

І найдивовижніше те, що вам навіть не потрібна концепція автоматичного імпорту. Сучасні IDE цілком здатні проаналізувати ваш проєкт і самостійно вставити/видалити оголошення імпорту, коли це необхідно. Просто подивіться, як це має працювати:

Автоматичний імпорт у будь-якій реалізації звучить круто на папері. Але він знищує всі професійні інструменти для роботи з проєкт, в якому більш як двоє файлів.

Наприклад Я можу візуалізувати структуру модуля. Він показує мені, що експортується та імпортується в кожному файлі:

Ось та ж діаграма з тим же кодом, але з плагіном автоімпорту:

Абсолютно порожній екран

Так. Вона, курво, порожня. Тому що аналіз коду показує, що ви насправді нічого нізвідки не імпортуєте. Тобто всі файли в модулі ніяк не пов'язані між собою.

Я можу легко знайти використання одного і того ж класу/функції/компонента. IDE показує мені, звідки імпортується функція і як вона використовується.

Я також можу бачити ієрархію викликів. Це надзвичайно корисно, коли ви хочете з'ясувати, чому функція запускається через десятки абстракцій. TimestampToString > class Timer > компонент TasksList

Чи працює той самий код при використанні автоімпорту? Ні. Тут ви бачите лише одне використання: У файлі, оголошення типів, який змушує ваше автоімпортоване лайно працювати з typescript. Це єдине місце, де функція була імпортована. Більше аналіз коду вам нічого не покаже 😀🔫.

І навіть тут, технічно, функція хоч й імпортована вона не викликана та не реекспортована. Це 'unused-import' який зазвичай видаляється IDE чи бандлером, та підсвічується лінтером як помилка. В нормальних умовах це сміття, яке автоматично видаляється/ігнорується більшістю сучасних інструментів.

Через це аналіз ієрархії викликів теж порожній 🤷‍♂️🫠

Будь ласка, ніколи не використовуйте неявний імпорт в будь-якій реалізації в будь-якому проєкті який ви плануєте підтримувати довше тижня. Це величезний шматок лайна, який зробить його складнішим для вас, складнішим для вашої команди, складнішим для підтримки та не дає ніяких переваг натомість.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Олександр Козак
Олександр Козак@kozack

4.6KПрочитань
1Автори
59Читачі
На Друкарні з 14 квітня

Більше від автора

  • Як зробити нескінченну прокрутку на сайті. Або 10 недоліків та одна перевага Infinity Scroll

    В цій статті я хочу описати 10 поширених проблем, пов’язаних з нескінченною прокруткою, які розробнику доведеться вирішувати при реалізації Infinity Scroll. Та про єдину причину, чому попри всі недоліки нескінченну прокрутку активно використовують.

    Теми цього довгочиту:

    Ui-ux
  • Чому ви повинні забути про rgb() та hex кольори при роботі з вебсайтами

    Формат задання кольорів функцією rgb() було представлено ще у 1996 році. Очевидно, що CSS далеко розвинувся з тих часів. Попри це, чомусь, багато веброзробників та вебдизайнерів вперто продовжують використовувати цей застарілий, обмежений та нелюдський формат кольору по цей день.

    Теми цього довгочиту:

    Css
  • Розмова з розробником pnpm

    Кочан Золтан 🇺🇦 — основний супроводжувач pnpm розказує про його створення, переваги над альтернативами та чому ви повинні обрати саме pnpm з поміж інших.

    Теми цього довгочиту:

    Pnpm

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається