JavaScript: различие между require и import

Источник: «Require vs. Import in JavaScript»
Ключевое слово import используется для импорта привязок, которые экспортируются другим модулем, а функция require() используется для загрузки модуля в приложении Node.js. Эти два механизма похожи, но у них есть важные отличия о которых вам следует знать. Мы обсудим их в этой статье.

В JavaScript ключевые слова require и import используются для импорта модулей. require — функция используемая для импорта модулей в Node.js, а import — новое ключевое слово используемое для импорта модулей в ECMAScript 6(ES6).

require()синхронная операция блокирующая выполнение скрипта до тех пор, пока модуль не будет загружен и готов к использованию. import()асинхронная операция, не блокирующая скрипт во время загрузки модуля.

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

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

Например, если у вас модуль с именем myModule, вы можете использовать require для импорта всего модуля следующим образом:

const myModule = require('myModule');

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

const myFunction = require('myModule').myFunction;

Используя import, вы можете импортировать весь модуль и все его экспорты следующим образом:

import * as myModule from 'myModule';

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

import {myFunction} from 'myModule';

В общем, import предпочтительное require, потому что это боле современный и гибкий синтаксис, и в конечном итоге он заменит require в языке. Однако в Node.js по-прежнему будет поддерживаться require, поэтому вы можете использовать любой синтаксис в зависимости от ваших потребностей и предпочтений.

import

Основное преимущество import в том, что он позволяет выбирать какие привязки мы хотим импортировать из модуля, а не импортировать весь модуль как отдельный объект.

Это может помочь уменьшить объём кода и сделает его более лёгким для чтения и понимания.

Пример использования ключевого слова import для импорта определённых привязок из другого модуля:

// moduleA.js

export const x = 1;
export const y = 2;

// moduleB.js

import { x, y } from './moduleA';

console.log(x); // outputs 1
console.log(y); // outputs 2

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

require

В контексте Node.js — require() встроенная функция для подключения внешних модулей, существующих в отдельных файлах. Выражение читает файл JavaScript, выполняет его, а затем возвращает экспортированный объект.

// app.js

const _ = require('lodash');

const arr = [1, 2, 3];

const sum = _.sum(arr);

console.log(sum); // outputs 6

Важно отметить, что функция require() является синхронной — она блокирует выполнение кода до тех пор, пока модуль не будет загружен.

Преимущество require() в использовании системы кэширования, чтобы гарантировать, что модули загружаются только один раз, даже если они требуются в нескольких файлах. Это означает, что когда вы используете require() для загрузки модуля, Node.js сначала проверяет, был ли модуль уже загружен и кэширован. Если это так, он вернёт кэшированную версию модуля, а не загрузит и не проанализирует её снова.

Дополнительные материалы

Предыдущая Статья

Использование mkcert для включения https на локальных сайтах

Следующая Статья

PHP: Разница между Трейтом, Интерфейсом и Абстрактным классом