У чому різниця між require та import у Node.js?

У Node.js require та import використовуються для підключення модулів у вашому коді, але між ними є важливі відмінності щодо синтаксису, функціональності та використання:

pic

1. Синтаксис

  • require: Використовує синтаксис модулів CommonJS.
  • const fs = require('fs');
  • import: Використовує синтаксис модулів ECMAScript (ES6).
  • import fs from 'fs';

2. Модульна система

require:

  • Є частиною системи модулів CommonJS.
  • Синхронне завантаження модулів.
  • Доступно у всіх версіях Node.js за замовчуванням.
  • Модулі завантажуються та виконуються вперше, коли їх запитують, і результат кешується для подальших викликів.

import:

  • Є частиною системи модулів ES6.
  • Асинхронне завантаження модулів, що дозволяє здійснювати оптимізації, як-от tree-shaking.
  • Вимагає використання type: "module" у файлі package.json або розширення файлів .mjs.
  • Більш сучасний і відповідає стандарту JavaScript.

3. Експорти за замовчуванням

require:

  • Імпортує значення з module.exports.
  • Приклад:
  • // У module.js module.exports = { foo: 'bar' }; // У main.js const myModule = require('./module'); console.log(myModule.foo); // Вивід: bar

import:

  • Імпортує експорт за замовчуванням або іменовані експорти.
  • Приклад:
  • // У module.js export default { foo: 'bar' }; // У main.js import myModule from './module'; console.log(myModule.foo); // Вивід: bar

4. Іменовані експорти

require:

  • Іменовані експорти потрібно деструктурувати з імпортованого об'єкта.
  • Приклад:
  • // У module.js exports.foo = 'bar'; // У main.js const { foo } = require('./module'); console.log(foo); // Вивід: bar

import:

  • Підтримує прямий імпорт іменованих експортів.
  • Приклад:
  • // У module.js export const foo = 'bar'; // У main.js import { foo } from './module'; console.log(foo); // Вивід: bar

5. Взаємодія

require:

  • Може імпортувати як модулі CommonJS, так і ES модулі.
  • При імпорті ES модуля може знадобитися доступ до властивості .default, щоб отримати експорт за замовчуванням.

import:

  • Може імпортувати тільки ES модулі нативно. Імпорт модулів CommonJS потребує додаткової обробки сумісності.

6. Варіанти використання

require:

import:

Що слід використовувати?

  • Для старих проєктів або бібліотек, які використовують CommonJS, залишайтеся з require.
  • Для сучасних проєктів, особливо тих, що використовують ES6+ або пакувальники на зразок Webpack, надайте перевагу import за його чистий синтаксис і сучасні можливості.

Для детальнішої інформації

Перекладено з: What is the difference between require and import in Node.js?

Leave a Reply

Your email address will not be published. Required fields are marked *