import(specifier)
上面代碼中,import
函數的參數specifier
,指定所要加載的模塊的位置。import
命令能夠接受什么參數,import()
函數就能接受什么參數,兩者區別主要是后者為動態加載。
import()
返回一個 Promise 對象。下面是一個例子。
const main = document.querySelector('main'); import(`./section-modules/${someVariable}.js`) .then(module => { module.loadPageInto(main); }) .catch(err => { main.textContent = err.message; });
import()
函數可以用在任何地方,不僅僅是模塊,非模塊的腳本也可以使用。它是運行時執行,也就是說,什么時候運行到這一句,就會加載指定的模塊。另外,import()
函數與所加載的模塊沒有靜態連接關系,這點也是與import
語句不相同。import()
類似於 Node 的require
方法,區別主要是前者是異步加載,后者是同步加載。
適用場合
下面是import()
的一些適用場合。
(1)按需加載。
import()
可以在需要的時候,再加載某個模塊。
button.addEventListener('click', event => { import('./dialogBox.js') .then(dialogBox => { dialogBox.open(); }) .catch(error => { /* Error handling */ }) });
上面代碼中,import()
方法放在click
事件的監聽函數之中,只有用戶點擊了按鈕,才會加載這個模塊。
(2)條件加載
import()
可以放在if
代碼塊,根據不同的情況,加載不同的模塊。
if (condition) { import('moduleA').then(...); } else { import('moduleB').then(...); }
上面代碼中,如果滿足條件,就加載模塊 A,否則加載模塊 B。
(3)動態的模塊路徑
import()
允許模塊路徑動態生成。
import(f())
.then(...);
上面代碼中,根據函數f
的返回結果,加載不同的模塊。