Динамичен импорт на ES модули в JavaScript

ES модулите могат да бъдат импортирани динамично. Тази възможност понякога е полезна. Нека да видим как се прави. Нека имаме следния модул:

src/test.jsexport function func1() {
  return '1'
}
export function func2() {
  return '2'
}
export default function() {
  return 'text';
};

Нека искаме да импортираме този модул не веднага, а при някакво събитие, например при кликване на бутон:

src/index.jsbtn.addEventListener('click', function() {
  
});

Импортираме модула с помощта на командата import:

src/index.jsbtn.addEventListener('click', function() {
  import('./test.js');
});

Командата import като резултат връща промис:

src/index.jsbtn.addEventListener('click', function() {
  import('./test.js').then(mod => {
    
  });
});

В променливата на колбъка ще попадне обект с експортираните функции:

src/index.jsbtn.addEventListener('click', function() {
  import('./test.js').then(mod => {
    let res1 = mod.func1();
    let res2 = mod.func2();
    
    console.log(res1, res2);
  });
});

Това, което се експортира по подразбиране, ще се намира в ключа default:

src/index.jsbtn.addEventListener('click', function() {
  import('./test.js').then(mod => {
    let dfn = mod.default;
    console.log(dfn);
  });
});

Може да се извършва деструктуриране при импорт:

src/index.jsbtn.addEventListener('click', function() {
  import('./test.js').then(({func1, func2}) => {
    let res1 = func1();
    let res2 = func2();
    
    console.log(res1, res2);
  });
});
Задание 1

Направете модул, който експортира масив с наименованията на дните от седмицата. При натискане на бутон импортирайте този модул и изведете дните от седмицата като списък ul.