Как работает загрузка ленивого модуля в ES6
Как можно лениво загружать модули ES6? По лени, я имею в виду, что я не хочу загружать модули, которые не нужны. Например, здесь я могу что-то сделать с RequireJS:
function someEventHandler() {
var SomeModule = require('some-module'),
module = new SomeModule();
// ...
}
Что-то в тех же строках не представляется возможным с помощью импорта ES6:
// Doesn't appear to be valid...
function someEventHandler() {
import SomeModule from 'some-module';
var module = new SomeModule();
// ...
}
Существуют ли какие-либо жизнеспособные методы, чтобы при необходимости извлекать зависимости, используя модули ES6? Или это единственный путь для отслеживания полного графика зависимостей и выборки всех фронтов?
Ответы
Ответ 1
Оператор import
будет работать только в самом верху файлов, и он будет загружать все из них. Это главным образом для того, чтобы избежать потенциальных проблем с круговыми зависимостями.
Также будет возможность выполнять асинхронную загрузку; однако спецификация пока не завершена. загрузчик модуля ES6 polyfill пакет использует метод под названием System.import(moduleName)
, который возвращает обещание, и окончательная спецификация может выглядеть аналогично:
function someEventHandler() {
System.import('some-module').then((SomeModule) => {
var module = new SomeModule();
// ...
})
}
Ответ 2
Пример для отложенной загрузки jQuery в ES6:
import('jquery').then((jquery) => {
// Because jquery is the module, here is the new syntax for using this
window.$ = jquery.default;
window.$('#id');
});