Od 2016 roku wiele się wydarzyło w świecie JavaScript, więc wierzę, że czas przedstawić najbardziej aktualne informacje na ten temat. Obecnie dynamiczne importowanie jest rzeczywistością zarówno w Node, jak i w przeglądarkach (natywnie, jeśli nie obchodzi cię IE, lub z @ babel / plugin-syntax-dynamic-import, jeśli cię to obchodzi).
Rozważmy więc przykładowy moduł something.jsz dwoma nazwanymi eksportami i jednym domyślnym eksportem:
export const hi = (name) => console.log(`Hi, ${name}!`)
export const bye = (name) => console.log(`Bye, ${name}!`)
export default () => console.log('Hello World!')
Możemy użyć import()składni, aby łatwo i czysto załadować ją warunkowo:
if (somethingIsTrue) {
import('./something.js').then((module) => {
module.hi('Erick')
module.bye('Erick')
module.default()
})
}
Ale ponieważ zwrot jest a Promise, możliwy jest również cukier async/ awaitsyntaktyczny:
async imAsyncFunction () {
if (somethingIsTrue) {
const module = await import('./something.js')
module.hi('Erick')
}
}
A teraz pomyśl o możliwościach wraz z przypisaniem do niszczenia obiektów ! Na przykład, jesteśmy w stanie łatwo umieścić w pamięci tylko jeden z tych nazwanych eksportów do późniejszego wykorzystania:
const { bye } = await import('./something.js')
bye('Erick')
A może weź jeden z tych nazwanych eksportów i zmień jego nazwę na dowolną inną:
const { hi: hello } = await import('./something.js')
hello('Erick')
Lub nawet zmień nazwę domyślnej eksportowanej funkcji na coś, co ma większy sens:
const { default: helloWorld } = await import('./something.js')
helloWorld()
Ostatnia (ale nie mniej ważna) uwaga: import() może wyglądać jak wywołanie funkcji, ale nie jest Function. Jest to specjalna składnia, która po prostu używa nawiasów (podobnie jak w przypadku super()). Więc nie jest możliwe przypisanie importdo zmiennej lub użycie rzeczy z Functionprototypu, takich jak call/ apply.
superdo połączenia określonego.