Простой JavaScript ES6 против импорта ()

javascript ecmascript-6 browserify babeljs javascript-import

4125 просмотра

1 ответ

Я собираюсь использовать импорт / экспорт модуля ES6 через babel, но столкнулся с этим запутанным утверждением в этой статье .

Говорится:

Сила ES6 - х importи в exportсочетании с require()методом, дает нам свободу , чтобы организовать все клиентского кода в модули и в то же время писать код , используя всю мощь новой версии JavaScript.

Это делает систему похожей на систему ES6 и require()служит двум различным целям, что делает этот babel/browserifyподход лучшим. Насколько я понимаю, они оба делают одно и то же, только немного по-разному. Может ли кто-нибудь помочь объяснить это?

Автор: qarthandso Источник Размещён: 08.11.2019 11:20

Ответы (1)


9 плюса

Решение

Это утверждение противоречиво. Если вы попали в ES6 / ES7, вы не захотите использовать CommonJS- стиль require, но вы всегда будете хотеть загружать модули асинхронно, используя import.

На самом деле, ES6 / ES7 имеет программный способ импорта модулей: System.import(...)но спецификация загрузчика все еще обсуждается ...

Пока он не получит статус рекомендации, есть полифилл (и более того ...): SystemJS .

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

ОП спросил в каком-то комментарии ...

Почему System.import (...) из ES6 понадобится для js-модулей, когда у нас есть возможности загрузки / экспорта модулей ES6? Разве они не выполняют одинаковые задачи?

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

Например, допустим, у вас есть приложение, для которого требуются плагины , а некоторые опции имеют флаг, loadPluginsкоторый может быть trueили false. Таким образом, вы захотите загрузить их, если приложение хочет, чтобы они были загружены:

if(options.loadPlugins) {
   Promise.all(
      options.plugins.map(plugin => System.import(plugin.path))
   ).then(() => {
      // Do stuff when all plugins have been already loaded!
   });
}
Автор: Matías Fidemraizer Размещён: 20.08.2016 01:14
Вопросы из категории :
32x32