Чи є якісь переваги від використання одного над іншим?
Поточна відповідь - ні, оскільки жоден із поточних двигунів браузера не реалізується import/exportзі стандарту ES6.
Деякі діаграми порівняння http://kangax.github.io/compat-table/es6/ не враховують це, тому коли ви бачите майже всю зелень для Chrome, будьте обережні. importключове слово від ES6 не враховано.
Іншими словами, поточні двигуни браузера, включаючи V8, не можуть імпортувати новий файл JavaScript з основного файлу JavaScript через будь-яку директиву JavaScript.
(У нас може бути ще лише кілька помилок або років, поки V8 не впровадить це відповідно до специфікації ES6.)
Цей документ - це те, що нам потрібно, і цей документ - це те, що ми мусимо підкорятися.
А стандарт ES6 сказав, що залежність від модуля повинна бути там, перш ніж ми прочитаємо модуль, як на мові програмування C, де у нас були (заголовки) .hфайли.
Це гарна і добре перевірена структура, і я впевнений, що фахівці, які створили стандарт ES6, мали це на увазі.
Це те, що дозволяє Webpack або іншим постачальникам пакетів оптимізувати пакет в деяких особливих випадках, а також зменшити деякі залежності від пакета, які не потрібні. Але у тих випадках, коли ми маємо ідеальні залежності, цього ніколи не станеться.
Буде потрібно деякий час, поки import/exportнативна підтримка не з’явиться, і requireключове слово довгий час нікуди не дінеться.
Що таке require?
Це node.jsспосіб завантаження модулів. ( https://github.com/nodejs/node )
Вузол використовує методи системного рівня для читання файлів. Ви в основному покладаєтесь на це під час використання require. requireзавершиться в деяких системних викликах, таких як uv_fs_open(залежить від системи завершення, Linux, Mac, Windows), щоб завантажити файл / модуль JavaScript.
Щоб перевірити, чи це правда, спробуйте скористатися Babel.js, і ви побачите, що importключове слово буде перетворене в require.

node --experimental-modules index.mjsдозволяє використовуватиimportбез Babel і працює в Node 8.5.0+. Ви також можете (і повинні) публікувати свої пакети npm як рідний ESModule , маючи зворотну сумісність за старимrequireспособом.