DevGang
Авторизоваться

Избегайте использования экспорта по умолчанию!

Как вы, возможно, уже знаете, в JavaScript существует два различных способа совместного использования функций: экспорт по умолчанию и экспорт по имени. Экспорт по умолчанию используется для экспорта одного значения из модуля, в то время как именованный экспорт позволяет экспортировать несколько значений из модуля.

Экспорт по умолчанию удобен, когда вы хотите экспортировать из модуля что-то конкретное, например функцию или класс. С другой стороны, именованные экспорты идеально подходят для тех случаев, когда вы хотите экспортировать из модуля сразу несколько вещей.

В этом посте мы рассмотрим, почему использование экспорта по умолчанию не рекомендуется и его следует избегать. Для начала давайте рассмотрим несколько примеров обоих вариантов.

Экспорт по имени

Пример именованного экспорта выглядит следующим образом:

export const add = (a, b) => a + b;

В этом примере мы экспортировали функцию add из модуля add.ts. Вы можете легко импортировать эту функцию в другой модуль, используя её имя:

import { add } from './add';

console.log(add(2, 3));     // 5

Экспорт по умолчанию

Давайте перепишем приведенный выше пример с использованием экспорта по умолчанию:

const add = (a, b) => a + b;
export default add;

В этом примере мы экспортировали функцию add в качестве экспорта по умолчанию. Затем эта функция может быть импортирована в другой модуль под любым именем по нашему выбору.

import add from './add';

console.log(add(2, 3));     // 5

Теперь, когда вы хорошо понимаете, что такое экспорт по имени и экспорт по умолчанию, давайте перейдем к следующему разделу, чтобы изучить недостатки использования экспорта по умолчанию.

Неудачное открытие

В сложных модулях экспорт по умолчанию может сбивать с толку. Разработчики могут не знать, какой экспорт используется по умолчанию, или даже не подозревать о его существовании. Это может привести к задержкам, так как инженерам приходится тратить больше времени на изучение документации или даже исходного кода, чтобы найти нужные им функции.

С другой стороны, использование именованных экспортов значительно упрощает поиск. С помощью именованных экспортов разработчики могут легко увидеть экспортируемые члены модуля и соответствующие им имена. Это особенно полезно при использовании IDE, так как популярные IDE позволяют использовать сочетание клавиш (например, "cmd + пробел") для предложения доступных функций из заданного файла. К сожалению, это сокращение не работает при использовании экспорта по умолчанию.

Рефакторинг

Если вы решите переименовать именованный экспорт в модуле, например, изменив имя функции add на sum, большинство IDE смогут автоматически обновить все случаи использования. Это значительно упрощает процесс рефакторинга.

Однако с экспортом по умолчанию это невозможно.

Автоматическое заполнение

Как мы уже говорили, когда модуль предоставляет именованные экспорты, мы можем легко выбрать определенную функцию из модуля с помощью ярлыка, предоставляемого IDE. Эта возможность не только экономит время, но и помогает IDE предлагать и автоматически импортировать необходимые функции по мере набора текста.

Например, если вы начнете вводить add, IDE отобразит список доступных пакетов, предоставляющих функцию add. Всё, что вам нужно сделать, - это выбрать нужный пакет из списка, и редактор автоматически выполнит импорт. Это так просто!

Несогласованные базы данных

Экспорт по умолчанию можно импортировать под любым именем, которое вы выберете. Это может привести к несоответствиям, когда несколько инженеров работают над одной кодовой базой и используют разные имена для импорта.

import add from './add';

// Other engineer could use another name
import sum from './add';

Повторный экспорт

При разработке пакета npm принято экспортировать функции пакета в его точку входа, которая обычно называется index.js или index.ts, если пакет реализован на TypeScript.

Чтобы сохранить порядок, мы часто создаем отдельные файлы для разных функций, а затем реэкспортируем их в файл точки входа. Например, у нас могут быть файлы с именами add.ts и multiply.ts, каждый из которых содержит функцию для сложения или умножения двух чисел.

Если мы используем экспорт по умолчанию для этих файлов, нам нужно указать имена функций, которые будут доступны в конечном пакете.

export { default as add } from './add';
export { default as multiply } from './multiply';

Использование экспорта по имени более удобно:

export { add } from './add';
export { multiply } from './multiply';

А если вы хотите экспортировать всё? Вот тут-то и пригодится экспорт с использованием подстановочных знаков - с ними всё становится ещё проще.

export * from './add';
export * from './multiply';

Заключение

Использование экспорта по умолчанию может затруднить поиск нужных вещей в коде и привести к несоответствиям. Именованные экспорты, напротив, облегчают поиск экспортируемых элементов и соответствующих им имен, особенно при использовании IDE.

Рекомендуется избегать использования экспорта по умолчанию и по возможности выбирать именованный экспорт. Таким образом вы получите более организованную и удобную в обслуживании базу данных, с которой будет легче работать в долгосрочной перспективе.

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу