A dynamic import is a promise and a chunk boundary

The syntax looks like a function call and is a language feature, and a bundler recognises it as a split point with no configuration at all.

const { renderChart } = await import(
  /* webpackChunkName: "charts" */ './charts'
);

// and the failure mode people forget:
try {
  const mod = await import('./reports');
} catch (e) {
  // a deploy removed the old chunk while this page was open
}

The chunk-load failure after a deploy is the case that is always missed, and it happens on every release for anybody with the page already open. Catching it and offering a reload is a better experience than a blank panel. A fully dynamic specifier defeats the static analysis, so import(path) with a variable bundles everything it might match — which is how a lazy route accidentally includes the whole application.