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.js
z 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
/ await
syntaktyczny:
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 import
do zmiennej lub użycie rzeczy z Function
prototypu, takich jak call
/ apply
.
super
do połączenia określonego.