К основному содержанию
скилл CX Codex

dynamic-import — скилл для Claude Code: что делает и как установить

Обучает агента разделять бандл через dynamic import(). Скилл помогает отложить загрузку тяжёлых библиотек и диалогов до действий пользователя.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add PatternsDev/skills --skill dynamic-import -a claude-code
Открыть на GitHub

Что делает dynamic-import

Скилл настраивает работу с import() в файлах **/*.js и **/*.ts. Он объясняет модели, как выносить модальные окна, выбор эмодзи или вспомогательные библиотеки из начальной сборки, чтобы ускорить первый рендер страницы. Для React предписывается связка React.lazy и React.Suspense с обязательным компонентом fallback.

В примере из документации Patterns.dev вынос EmojiPicker уменьшил размер основного бандла с 1.5MiB до 1.33 MiB. Скилл прямо указывает ограничение: если проект использует серверный рендеринг (SSR), React.Suspense не поддерживается. Для таких сценариев инструкция требует переходить на библиотеку loadable-components.

Какие задачи решает

  • сократить размер начального JavaScript-бандла
  • настроить отложенную загрузку компонентов через React.lazy
  • вынести тяжёлые модули в отдельные чанки для SSR с loadable-components
  • добавить fallback-компоненты на время загрузки интерфейса

Примеры запросов агенту

  • Перепиши импорт EmojiPicker на React.lazy и Suspense, чтобы облегчить стартовый бандл
  • Как настроить динамический импорт для SSR-проекта без поломки Suspense?
  • Вынеси тяжёлую модалку из начального рендера через dynamic import()

Как установить dynamic-import

1Через Skills CLI (Vercel)

npx skills add PatternsDev/skills --skill dynamic-import -a claude-code

2Вручную: положить файлы

~/.claude/skills/dynamic-import/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/dynamic-import/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о dynamic-import

Как установить dynamic-import в Claude Code?

Выполните в терминале команду npx skills add PatternsDev/skills --skill dynamic-import -a claude-code.

Зачем нужен скилл dynamic-import?

Он задаёт правила разделения кода: переносить некритичные компоненты в отдельные чанки и показывать заглушку, пока скрипт скачивается.

Что делать, если в проекте используется SSR?

Инструкция советует подключить библиотеку loadable-components, потому что React.Suspense пока не поддерживается серверным рендерингом.

Исходный текст

SKILL.md · MIT
---
name: dynamic-import
description: Teaches dynamic import() for on-demand code loading. Use when you need to reduce initial bundle size by lazily loading modules that aren't required at startup.
paths:
  - "**/*.js"
  - "**/*.ts"
license: MIT
metadata:
  author: patterns.dev
  version: "1.1"
related_skills:
  - "module-pattern"
  - "singleton-pattern"
---

# Dynamic Import

In a chat application, we have four key components: `UserInfo`, `ChatList`, `ChatInput` and `EmojiPicker`. However, only _three_ of these components are used instantly on the initial page load: `UserInfo`, `ChatList` and `ChatInput`. The `EmojiPicker` isn't directly visible, and may not even be rendered at all if the user won't even click on the `Emoji` in order to toggle the `EmojiPicker`. This would mean that we unnecessarily added the `EmojiPicker` module to our initial bundle, which potentially increased the loading time!

In order to solve this, we can _dynamically import_ the `EmojiPicker` component. Instead of statically importing it, we'll only import it when we want to show the `EmojiPicker`. An easy way to dynamically import components in React is by using **React Suspense**. The `React.Suspense` component receives the component that should be dynamically loaded, which makes it possible for the `App` component to render its contents faster by suspending the import of the `EmojiPicker` module!

## When to Use

- Use this when certain modules are only needed based on user interaction or conditions
- This is helpful when you want to reduce the initial bundle size for faster page loads
- Use this when components like modals, pickers, or heavy libraries aren't needed on initial render

## Instructions

- Use `React.lazy` with `Suspense` for dynamic component imports in React
- Provide meaningful fallback UI while dynamically imported modules are loading
- Consider using `loadable-components` for SSR applications where React Suspense isn't supported
- Only dynamically import modules that aren't critical to the initial render

## Details

Instead of unnecessarily adding `EmojiPicker` to the initial bundle, we can split it up into its own bundle and reduce the size of the initial bundle!

A smaller initial bundle size means a faster initial load: the user doesn't have to stare at a blank loading screen for as long. The `fallback` component lets the user know that our application hasn't frozen: they simply need to wait a little while for the module to be processed and executed.

```
Asset                             Size         Chunks            Chunk Names
emoji-picker.bundle.js           1.48 KiB      1    [emitted]    emoji-picker
main.bundle.js                   1.33 MiB      main [emitted]    main
vendors~emoji-picker.bundle.js   171 KiB       2    [emitted]    vendors~emoji-picker
```

Whereas previously the initial bundle was `1.5MiB`, we've been able to reduce it to `1.33 MiB` by suspending the import of the `EmojiPicker`!

By dynamically importing the `EmojiPicker` component, we managed to reduce the initial bundle size from `1.5MiB` to `1.33 MiB`! Although the user may still have to wait a while until the `EmojiPicker` has been fully loaded, we have improved the user experience by making sure the application is rendered and interactive while the user waits for the component to load.

### Loadable Components

Server-side rendering doesn't support React Suspense (yet). A good alternative to React Suspense is the [`loadable-components`](https://loadable-components.com/docs/getting-started/) library, which can be used in SSR applications.

Similar to React Suspense, we can pass the lazily imported module to the `loadable`, which will only import the module once the `EmojiPicker` module is being requested! While the module is being loaded, we can render a `fallback` component.

Although loadable components are a great alternative to React Suspense for SSR applications, they're also useful in CSR applications in order to suspend the import of modules.

## Source

- [patterns.dev/vanilla/dynamic-import](https://patterns.dev/vanilla/dynamic-import)

© patterns.dev · MIT · PatternsDev/skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
frontend-dev-guidelines sickn33 Задаёт строгие правила для React и TypeScript: структура фич, Suspense-запросы, MUI и проверка влияния на производительность. CX Codex +1 1 500установок nextjs-use-search-params-suspense wsimmonds Скилл объясняет, как правильно читать параметры URL в клиентских компонентах Next.js: директива 'use client' плюс обёртка Suspense. CX Codex +1 311установок webflow-code-component:component-audit webflow Проверяет код-компоненты Webflow на архитектурные решения: что вынесено в props, как устроено состояние, где нужны слоты и Shadow DOM. CX Codex +1 1 000установок zustand pproenca Скилл с 43 правилами для Zustand в React: архитектура сторов, селекторы, лишние ре-рендеры. Пригодится, когда пишете или рефакторите стор. CX Codex +1 446установок nextjs-dynamic-routes-params wsimmonds Скилл подсказывает агенту, как строить динамические сегменты App Router и читать params в Next.js 15+. Пригодится, когда страницы зависят от ID или слага из URL. CX Codex +1 303установок trees pierrecomputer Помогает настроить интерактивное дерево файлов на базе @pierre/trees. Пригодится для рендеринга дерева в React, vanilla JS, веб-компонентах или SSR. CX Codex +1 307установок

Из того же набора44

loading-sequence Скилл объясняет агенту, в каком порядке грузить CSS, шрифты, JS и картинки, чтобы страница проходила Core Web Vitals. CX Codex +1 1 500установок preload Обучает агента настраивать предзагрузку критических ресурсов сайта. Помогает подтянуть шрифты, ключевые скрипты и баннеры, которые браузер находит слишком поздно. CX Codex +1 1 500установок compression Скилл объясняет, как сжимать JavaScript через Gzip и Brotli, чтобы скрипты быстрее уходили по сети. Полезен при настройке продакшен-сборки и медленных соединениях. CX Codex +1 1 500установок bundle-splitting Скилл учит агента делить большой JavaScript-бандл на части, чтобы быстрее рисовалась первая страница и приложение становилось интерактивным. CX Codex +1 1 500установок static-import Объясняет синтаксис import в ES2015 и помогает решить, когда модуль стоит грузить сразу, а когда переключиться на динамический импорт. CX Codex +1 1 400установок prpl Скилл обучает ИИ-агента паттерну PRPL для ускорения первой загрузки веб-приложений на слабых устройствах и медленных сетях. CX Codex +1 1 400установок tree-shaking Скилл объясняет tree shaking и подсказывает агенту, как убрать неиспользуемые экспорты из JavaScript-бандла. Пригодится, когда сборка тянет лишнее. CX Codex +1 1 400установок route-based Подсказывает агенту, как разбить SPA по маршрутам и грузить только тот код, который нужен на текущей странице. Пригодится, когда маршрутов много, а стартовая загрузка тормозит. CX Codex +1 1 400установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой