JavaScript: различие между require и import
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 сначала проверяет, был ли модуль уже загружен и кэширован. Если это так, он вернёт кэшированную версию модуля, а не загрузит и не проанализирует её снова.