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

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

Скилл учит ИИ настраивать сборку на esbuild для браузера и Node.js. Помогает подготовить конфиг, настроить TypeScript и запустить сервер разработки.

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

Что делает esbuild-bundler

Скилл передаёт агенту правила сборки проектов через esbuild. В инструкции описаны вызовы через CLI и JavaScript API, поддержка синтаксиса JSX, встроенные лоадеры для ассетов и подмена переменных окружения через параметр define.

Внутри разобраны конкретные конфигурации под Node.js и браузер, форматы модулей esm или cjs, а также запуск локального dev-сервера через context.serve. Для разделения кода действует жёсткое ограничение: сплиттинг работает только при значении format: 'esm' вместе с опцией outdir вместо outfile.

Сам esbuild намеренно не проверяет типы TypeScript. Скилл напоминает выставить isolatedModules: true в tsconfig.json, а вызов tsc --noEmit запускать отдельно перед сборкой.

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

  • составить конфигурационный скрипт сборки под браузер или Node.js
  • задать настройки tsconfig.json под требования esbuild
  • настроить разделение бандла на чанки и внешние зависимости
  • запустить локальный dev-сервер с отслеживанием файлов

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

  • Собери скрипт esbuild.config.mjs для Node.js с форматом ESM и внешними пакетами
  • Как правильно настроить tsconfig.json для проекта с esbuild?
  • Настрой сервер разработки через context.serve с портом 3000

Как установить esbuild-bundler

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill esbuild-bundler -a claude-code

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

~/.claude/skills/esbuild-bundler/SKILL.md

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

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

Вопросы о esbuild-bundler

Как установить esbuild-bundler в Claude Code?

Выполните команду npx skills add Mindrally/skills --skill esbuild-bundler -a claude-code.

Проверяет ли esbuild типы TypeScript?

Нет, esbuild удаляет типы без валидации. Для проверки типов запускайте tsc --noEmit отдельной командой.

Что требуется для разделения кода в esbuild?

Код-сплиттинг работает только при указании format: 'esm' и каталога вывода через outdir.

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

SKILL.md · Apache-2.0
---
name: esbuild-bundler
description: Best practices and guidelines for esbuild, the ultra-fast JavaScript and TypeScript bundler and minifier
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# esbuild Bundler

You are an expert in esbuild, the extremely fast JavaScript and TypeScript bundler written in Go. Follow these guidelines when working with esbuild configurations.

## Core Principles

- esbuild is 10-100x faster than traditional bundlers
- Zero configuration needed for most use cases
- Native TypeScript and JSX support without additional setup
- Focus on speed while maintaining code quality
- Written in Go for native performance

## Project Structure

```
project/
├── src/
│   ├── index.ts          # Main entry point
│   ├── components/       # UI components
│   └── utils/            # Utility functions
├── dist/                 # Build output
├── esbuild.config.mjs    # Build script (optional)
├── tsconfig.json         # TypeScript config
└── package.json
```

## Basic Usage

### Command Line

```bash
# Basic bundle
esbuild src/index.ts --bundle --outfile=dist/bundle.js

# Production build
esbuild src/index.ts --bundle --minify --sourcemap --outfile=dist/bundle.js

# Watch mode
esbuild src/index.ts --bundle --watch --outfile=dist/bundle.js
```

### JavaScript API

```javascript
import * as esbuild from 'esbuild';

await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  minify: true,
  sourcemap: true,
  outfile: 'dist/bundle.js'
});
```

## TypeScript Configuration

### tsconfig.json Best Practices

```json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "esModuleInterop": true,
    "isolatedModules": true,
    "strict": true,
    "skipLibCheck": true,
    "noEmit": true,
    "verbatimModuleSyntax": true,
    "noUncheckedIndexedAccess": true
  },
  "include": ["src/**/*"]
}
```

### Important TypeScript Settings

- `isolatedModules: true` - Required for esbuild compatibility
- `esModuleInterop: true` - Better ESM compatibility
- `noEmit: true` - Let esbuild handle output, use tsc for type checking only

## Build Configuration

### Browser Build

```javascript
await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  minify: true,
  sourcemap: true,
  target: ['chrome90', 'firefox88', 'safari14', 'edge90'],
  outfile: 'dist/bundle.js'
});
```

### Node.js Build

```javascript
await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  platform: 'node',
  target: 'node18',
  format: 'esm',
  outfile: 'dist/index.js'
});
```

### Multiple Entry Points

```javascript
await esbuild.build({
  entryPoints: ['src/index.ts', 'src/worker.ts'],
  bundle: true,
  outdir: 'dist',
  splitting: true,
  format: 'esm'
});
```

## Output Formats

### ESM (ES Modules)

```javascript
await esbuild.build({
  format: 'esm',
  // Outputs: import/export syntax
});
```

### CommonJS

```javascript
await esbuild.build({
  format: 'cjs',
  // Outputs: require/module.exports
});
```

### IIFE (Browser Scripts)

```javascript
await esbuild.build({
  format: 'iife',
  globalName: 'MyApp',
  // Outputs: self-executing function
});
```

## Loaders

### Built-in Loaders

```javascript
await esbuild.build({
  loader: {
    '.png': 'file',
    '.svg': 'text',
    '.json': 'json',
    '.woff': 'dataurl'
  }
});
```

### Loader Types

- `js` - JavaScript
- `ts` - TypeScript
- `jsx` - JavaScript with JSX
- `tsx` - TypeScript with JSX
- `json` - JSON data
- `text` - Plain text
- `file` - Copy file, return path
- `dataurl` - Inline as data URL
- `binary` - Inline as Uint8Array
- `base64` - Inline as base64
- `copy` - Copy file, no reference

## External Dependencies

### Mark as External

```javascript
await esbuild.build({
  external: ['react', 'react-dom', 'lodash']
});
```

### External Patterns

```javascript
await esbuild.build({
  external: ['*.png', '@aws-sdk/*']
});
```

## Code Splitting

```javascript
await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  splitting: true,
  format: 'esm',
  outdir: 'dist'
});
```

Note: Code splitting requires `format: 'esm'` and `outdir` (not `outfile`).

## Plugins

### Plugin Structure

```javascript
const myPlugin = {
  name: 'my-plugin',
  setup(build) {
    // On resolve - intercept import paths
    build.onResolve({ filter: /^env$/ }, args => ({
      path: args.path,
      namespace: 'env-ns'
    }));

    // On load - provide module contents
    build.onLoad({ filter: /.*/, namespace: 'env-ns' }, () => ({
      contents: JSON.stringify(process.env),
      loader: 'json'
    }));
  }
};

await esbuild.build({
  plugins: [myPlugin]
});
```

### Common Plugins

```javascript
import esbuildPluginTsc from 'esbuild-plugin-tsc';

await esbuild.build({
  plugins: [
    esbuildPluginTsc({
      force: true
    })
  ]
});
```

## Development Server

### Serve API

```javascript
const ctx = await esbuild.context({
  entryPoints: ['src/index.ts'],
  bundle: true,
  outdir: 'dist'
});

await ctx.serve({
  servedir: 'dist',
  port: 3000
});
```

### Watch Mode

```javascript
const ctx = await esbuild.context({
  entryPoints: ['src/index.ts'],
  bundle: true,
  outfile: 'dist/bundle.js'
});

await ctx.watch();
console.log('Watching for changes...');
```

## Environment Variables

### Define API

```javascript
await esbuild.build({
  define: {
    'process.env.NODE_ENV': '"production"',
    'process.env.API_URL': JSON.stringify(process.env.API_URL)
  }
});
```

## Optimization

### Minification

```javascript
await esbuild.build({
  minify: true,
  // Or granular control:
  minifyWhitespace: true,
  minifyIdentifiers: true,
  minifySyntax: true
});
```

### Tree Shaking

```javascript
await esbuild.build({
  treeShaking: true,
  // Mark files as side-effect free
  ignoreAnnotations: false
});
```

### Drop Console and Debugger

```javascript
await esbuild.build({
  drop: ['console', 'debugger']
});
```

## Type Checking

esbuild does not perform type checking. Run TypeScript separately:

```json
{
  "scripts": {
    "typecheck": "tsc --noEmit",
    "build": "npm run typecheck && node esbuild.config.mjs",
    "dev": "concurrently \"tsc --noEmit --watch\" \"node esbuild.config.mjs --watch\""
  }
}
```

## Build Script Example

```javascript
// esbuild.config.mjs
import * as esbuild from 'esbuild';

const isProduction = process.env.NODE_ENV === 'production';
const isWatch = process.argv.includes('--watch');

const config = {
  entryPoints: ['src/index.ts'],
  bundle: true,
  platform: 'browser',
  target: ['es2020'],
  format: 'esm',
  outdir: 'dist',
  sourcemap: !isProduction,
  minify: isProduction,
  splitting: true,
  define: {
    'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
  }
};

if (isWatch) {
  const ctx = await esbuild.context(config);
  await ctx.watch();
  console.log('Watching for changes...');
} else {
  await esbuild.build(config);
  console.log('Build complete!');
}
```

## Best Practices

### Do

- Use `isolatedModules: true` in TypeScript config
- Run type checking separately with `tsc --noEmit`
- Use the context API for watch mode
- Leverage native TypeScript and JSX support
- Use external for peer dependencies in libraries

### Avoid

- Relying on esbuild for type checking
- Using features that require type information (decorators with metadata)
- Ignoring the `isolatedModules` requirement
- Over-configuring when defaults work

## Common Patterns

### Library Build

```javascript
await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  external: ['react', 'react-dom'],
  format: 'esm',
  outfile: 'dist/index.js',
  sourcemap: true
});
```

### Application Build

```javascript
await esbuild.build({
  entryPoints: ['src/index.tsx'],
  bundle: true,
  splitting: true,
  format: 'esm',
  outdir: 'dist',
  minify: true,
  sourcemap: true,
  target: ['chrome90', 'firefox88', 'safari14']
});
```

## Performance Tips

- esbuild parallelizes work automatically
- File system caching is built-in
- Use incremental builds in development
- Avoid unnecessary plugins that slow builds

© Mindrally · Apache-2.0 · Mindrally/skills

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

Всё по теме «Фронтенд и UI» →
frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок hyperframes heygen-com Скилл задаёт агенту правила рендера HTML-кода в видео через HyperFrames. Помогает собирать проморолики, эксплейнеры и титры прямо в коде проекта. CX Codex +1 1 200 000установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок

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

koa-typescript Задаёт агенту правила разработки API на Koa.js и TypeScript: слоистая модель middleware, async/await, структура проекта. CX Codex +1 704установок aws-development Скилл задаёт агенту правила разработки на AWS: Lambda, CDK, SAM, DynamoDB, IAM и serverless-архитектура через Infrastructure as Code. CX Codex +1 701установок prisma-development Задаёт агенту правила работы с Prisma ORM и TypeScript: схема, миграции, транзакции, обработка ошибок. Пригодится, когда в проекте есть Prisma. CX Codex +1 698установок auth0-authentication Скилл задаёт агенту правила работы с Auth0: потоки авторизации, Actions, проверка токенов и защита редиректов. CX Codex +1 700установок supabase-development Задаёт агенту порядок работы с Supabase: схема базы, RLS-политики, авторизация, realtime-подписки и Edge Functions. CX Codex +1 699установок monorepo Скилл задаёт агенту набор правил для монорепозиториев на TypeScript, React, Next.js и Expo с Turbo. Пригодится, когда в одном репозитории живут несколько приложений и общих пакетов. CX Codex +1 694установок less-best-practices Скилл задаёт стандарты архитектуры стилей на Less: модульную структуру файлов, шкалы переменных и готовые миксины. Помогает поддерживать чистый CSS без роста специфичности селекторов. CX Codex +1 692установок llamaindex-development Скилл настраивает ИИ-ассистента на разработку RAG-пайплайнов и поиск по документам на LlamaIndex в Python. Помогает писать загрузчики, парсеры и движки запросов. CX Codex +1 691установок

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

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