Чи є якісь переваги від використання одного над іншим?
Поточна відповідь - ні, оскільки жоден із поточних двигунів браузера не реалізується 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
способом.