Skip to main content

Modules and Code Organization

Dynamic Imports and Code Splitting

0:00
LearnStep 1/3

On-Demand Module Loading

Standard ES Modules use static imports (import ... from ...), which require all dependencies to be loaded before the code runs. This can slow down initial page loads if your application is large. Dynamic imports allow you to load modules asynchronously, on demand, only when they are needed.

The import() Function

The import('path/to/module') syntax returns a Promise that resolves to the module namespace object. This allows you to use it inside functions, conditionals, or event handlers.

javascript

Code Splitting

Modern bundlers like Webpack or Vite automatically recognize import() and perform code splitting. They separate the dynamically imported module into a separate chunk (file), which is only fetched from the server when the import() statement is executed.

Top-Level Await

In modern environments (ES2022+), you can use await at the top level of a module without an async wrapper. This is particularly useful for dynamic imports that define module dependencies.

javascript

Error Handling

Since dynamic imports returns a promise, you should always handle potential network failures or missing files.

javascript