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

Передмова

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

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

Їжачок кричить на землю (@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

6.8KПрочитань
1Автори
68Читачі
Підтримати
На Друкарні з 14 квітня

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

  • Детальний огляд семантики HTML теґів. Різниця між <section> та <article>

    Огляд семантики HTML: розрізнення між <section> та <article>, значення правильного використання тегів та їх роль у структурі вебсторінки. Дослідження важливості семантики для SEO та доступності, а також рекомендації щодо використання HTML-елементів та ролей

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

    Html
  • Про доступність та UI на прикладі мого особистого сайту

    Знайомтесь це мій особистий сайт. Перший знімок те яким він був ДО другий - ПІСЛЯ сьогоднішнього патчу. І в цій короткій статті я хочу зробити маленьке ревью та розказати на прикладах ЧОМУ я реалізував деякі дивні речі.

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

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

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

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

    Ui-ux

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

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

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

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