Dynamisk import av ES-moduler i JavaScript

ES-moduler kan importeras dynamiskt. Denna funktion är ibland användbar. Låt oss se hur det går till. Låt oss säga att vi har följande modul:

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

Låt oss säga att vi vill importera denna modul inte direkt, utan vid ett visst event, till exempel vid klick på en knapp:

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

Importera modulen med kommandot import:

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

Kommandot import returnerar ett löfte (promise) som resultat:

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

I callbackens variabel kommer ett objekt med de exporterade funktionerna att hamna:

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

Det som exporteras som standard kommer att finnas i nyckeln default:

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

Man kan använda destructuring vid import:

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

Skapa en modul som exporterar en array med veckodagars namn. Vid klick på en knapp importera denna modul och skriv ut veckodagarna som en lista ul.