Представим, что у нас есть приложением с админкой и публичным фронтом и для этого в проекте можно выделить два бандла:
- app.js — для фронта
- admin.js — для админки
В каждом бандле есть вендорные модули (react, ember, jquery etc.) и модули приложения (то, что написано прграммистом).
Каждый бандл можно разбить как минимум на два чанка: собственно приложение и вендорные либы (чтобы пользователь при апдейте приложения не грузил заново вендорные библиотеки, которые не менялись). А если приложение очень большое, то бандл разбивается на ещё больше чанков: например чанк для интерфейса личных сообщений, чанк для ленты новостей и т.д. Такие чанки грузятся по запросу (когда пользователь переходит на соответствующий раздел / интерфейс) и это позволяет снизить нагрузку на страницу.
Бандл — это приложение. Он родитель чанков — частей этого приложения. И все они состоят из модулей — «атомов», подключаемых через import / require. Если это не объясняет их отличие друг от друга, то я не понял смысл вопроса.