Dal 2016 sono passate molte cose nel mondo JavaScript, quindi credo che sia ora di offrire le informazioni più aggiornate su questo argomento. Attualmente le importazioni dinamiche sono una realtà sia su Node che sui browser (in modo nativo se non ti interessa IE, o con @ babel / plugin-syntax-dynamic-import se ti interessa).
Quindi, considera un modulo di esempio something.jscon due esportazioni denominate e un'esportazione predefinita:
export const hi = (name) => console.log(`Hi, ${name}!`)
export const bye = (name) => console.log(`Bye, ${name}!`)
export default () => console.log('Hello World!')
Possiamo usare la import()sintassi per caricarlo in modo semplice e pulito in modo condizionale:
if (somethingIsTrue) {
import('./something.js').then((module) => {
module.hi('Erick')
module.bye('Erick')
module.default()
})
}
Ma poiché il ritorno è a Promise, lo async/ awaitzucchero sintattico è anche possibile:
async imAsyncFunction () {
if (somethingIsTrue) {
const module = await import('./something.js')
module.hi('Erick')
}
}
Ora pensa alle possibilità insieme all'assegnazione di destrutturazione di oggetti ! Ad esempio, siamo in grado di mettere facilmente in memoria solo una di quelle esportazioni con nome per un uso successivo:
const { bye } = await import('./something.js')
bye('Erick')
O forse prendi una di quelle esportazioni denominate e rinominala in qualsiasi altra cosa che vogliamo:
const { hi: hello } = await import('./something.js')
hello('Erick')
O anche rinominare la funzione esportata predefinita in qualcosa che abbia più senso:
const { default: helloWorld } = await import('./something.js')
helloWorld()
Solo un'ultima (ma non meno importante) nota: import() potrebbe sembrare una chiamata di funzione, ma non è un file Function. È una sintassi speciale che utilizza solo le parentesi (simile a ciò che accade con super()). Quindi non è possibile assegnare importa una variabile o usare cose del Functionprototipo, come call/ apply.
superper chiamare specifico.