Kể từ năm 2016, rất nhiều thứ đã trôi qua trong thế giới JavaScript, vì vậy tôi tin rằng đã đến lúc cung cấp thông tin cập nhật nhất về chủ đề này. Hiện tại, nhập động là một thực tế cả trên Node và trên các trình duyệt (nguyên bản nếu bạn không quan tâm đến IE hoặc với @ babel / plugin-cú pháp-động-nhập nếu bạn quan tâm).
Vì vậy, hãy xem xét một mô-đun mẫu something.js
có hai xuất được đặt tên và một xuất mặc định:
export const hi = (name) => console.log(`Hi, ${name}!`)
export const bye = (name) => console.log(`Bye, ${name}!`)
export default () => console.log('Hello World!')
Chúng ta có thể sử dụng import()
cú pháp để tải nó một cách dễ dàng và rõ ràng có điều kiện:
if (somethingIsTrue) {
import('./something.js').then((module) => {
module.hi('Erick')
module.bye('Erick')
module.default()
})
}
Nhưng vì kết quả trả về là a Promise
, nên đường async
/ await
cú pháp cũng có thể:
async imAsyncFunction () {
if (somethingIsTrue) {
const module = await import('./something.js')
module.hi('Erick')
}
}
Bây giờ hãy nghĩ về các khả năng cùng với Phân công cấu trúc đối tượng ! Ví dụ: chúng tôi có thể dễ dàng đặt chỉ một trong những bản xuất đã đặt tên vào bộ nhớ để sử dụng sau:
const { bye } = await import('./something.js')
bye('Erick')
Hoặc có thể lấy một trong những bản xuất có tên đó và đổi tên nó thành bất kỳ thứ gì khác mà chúng tôi muốn:
const { hi: hello } = await import('./something.js')
hello('Erick')
Hoặc thậm chí đổi tên hàm được xuất mặc định thành một cái gì đó có ý nghĩa hơn:
const { default: helloWorld } = await import('./something.js')
helloWorld()
Lưu ý cuối cùng (nhưng không kém phần quan trọng): import()
có thể trông giống như một lệnh gọi hàm, nhưng nó không phải là một Function
. Đó là một cú pháp đặc biệt chỉ sử dụng dấu ngoặc đơn (tương tự như những gì xảy ra với super()
). Vì vậy, không thể gán import
cho một biến hoặc sử dụng những thứ của Function
nguyên mẫu, như call
/ apply
.
super
để gọi cụ thể.