2016年以来、JavaScriptの世界では多くのことが経過しているので、このトピックに関する最新の情報を提供する時が来たと思います。現在、動的インポートはノードとブラウザーの両方で現実的です(IEを気にしない場合は当然、気にする場合は@ babel / plugin-syntax-dynamic-importを使用)。
したがって、something.js
2つの名前付きエクスポートと1つのデフォルトエクスポートを持つサンプルモジュールについて考えてみます。
export const hi = (name) => console.log(`Hi, ${name}!`)
export const bye = (name) => console.log(`Bye, ${name}!`)
export default () => console.log('Hello World!')
import()
構文を使用して、条件付きで簡単かつクリーンにロードできます。
if (somethingIsTrue) {
import('./something.js').then((module) => {
module.hi('Erick')
module.bye('Erick')
module.default()
})
}
ただし、戻り値は、Promise
であるため、async
/await
構文糖も可能です。
async imAsyncFunction () {
if (somethingIsTrue) {
const module = await import('./something.js')
module.hi('Erick')
}
}
ここで、オブジェクト破壊割り当てとともに可能性について考えてください。たとえば、後で使用するために、名前付きエクスポートの1つだけをメモリに簡単に配置できます。
const { bye } = await import('./something.js')
bye('Erick')
または、これらの名前付きエクスポートの1つを取得して、名前を別の名前に変更します。
const { hi: hello } = await import('./something.js')
hello('Erick')
または、デフォルトのエクスポートされた関数の名前をより意味のある名前に変更することもできます。
const { default: helloWorld } = await import('./something.js')
helloWorld()
最後の(しかし少なくとも)注意: import()
関数呼び出しのように見えるかもしれませんが、そうではありませんFunction
。これは、かっこを使用するだけの特別な構文です(で発生するのと同様super()
)。したがってimport
、変数に割り当てたり、/Function
などのプロトタイプのものを使用したりすることはできません。call
apply
super
特定の呼び出しに使用します。