Разница между System.import() и import()?
В webpack 1 docs - это утверждение, которое в webpack 2 будет использовать System.import()
для динамического require:
К счастью, существует спецификация JavaScript-загрузчика JavaScript API, являющаяся для обработки динамического варианта использования: System.load
(или System.import
). Этот API будет родным, эквивалентным приведенному выше require
.
И за это время по всему миру было примеры использования этого System.import()
.
Перед выпуском webpack 2 авторы решили изменить System.import()
на import()
:
добавить import()
как конструкцию разделения кода. Он должен использоваться вместо System.import
, когда это возможно. System.import
будет устаревать в webpack 2 release (удалено в webpack 3) , так как поведение неверно согласно спецификации.
Этот import()
основан на tc39/proposal-dynamic-import спецификации, и вы можете узнать больше, почему они сделали это изменение здесь.
Может ли кто-нибудь объяснить разницу между System.import()
и import()
?
Несмотря на другое имя, использование выглядит одинаково:
import(modulePath)
.then(module => module.default())
.catch(/* ... */);
System.import(modulePath)
.then(module => module.default())
.catch(/* ... */);
Но в weback 2 doc есть: "System.import()
поведение неверно в соответствии со спецификацией" - поэтому он предполагает, что существует разница между System.import()
и import()
.
Ответы
Ответ 1
Важная часть вашей первой цитаты
спецификация написана
Когда Webpack 1 реализовал System.import
, спецификация все еще развивалась. Если факт это все еще есть. Webpack 1 реализовал System.import
, потому что это то, что было брошено вокруг как потенциальный API в то время.
Webpack 2 реализует import()
, потому что это новое предложение стандартизировать синтаксический подход, а не на основе библиотеки.
Ответ 2
Здесь вы ищете: tc39 Предложение для импорта
Фактическая функция
Проекты коллекции идей Loader в разное время имели фактические функции (а не только синтаксические формы, подобные функциям) с именем System.import() или System.loader.import() или аналогичные, которые выполняют одни и те же варианты использования.
Самая большая проблема здесь, как ранее отмечалось редакторами спецификаций, заключается в том, как интерпретировать аргумент спецификатора для этих функций. Так как это просто функции, которые одинаковы во всем Царстве и не изменяются в каждом script или модуле, функция должна интерпретировать свой аргумент одинаково независимо от того, где он вызывается. (Если не реализовано что-то действительно странное, как проверка стека). Вероятно, это сталкивается с такими же проблемами, как проблема с базовым URL-адресом документа для функции importModule выше, где относительные спецификаторы модулей становятся фермой ошибок и не соответствуют никаким соседним объявлениям импорта.