rollup-bundler — скилл для Claude Code: сборка библиотек на Rollup
Скилл задаёт агенту правила конфигурации Rollup.js: форматы вывода, внешние зависимости, tree-shaking и плагины для сборки библиотек.
npx skills add Mindrally/skills --skill rollup-bundler -a claude-codeЧто делает rollup-bundler
Скилл превращает агента в знатока Rollup.js. Он подсказывает, как собрать конфиг rollup.config.mjs, какие форматы вывода выбрать — esm, cjs, umd или iife — и как развести их по нескольким output-объектам. Отдельно разбирается тема внешних зависимостей: peer-зависимости и dependencies из package.json помечаются как external, чтобы они не попали в бандл.
Внутри — готовые примеры подключения плагинов: @rollup/plugin-node-resolve, @rollup/plugin-commonjs, @rollup/plugin-babel, @rollup/plugin-typescript, @rollup/plugin-terser и @rollup/plugin-replace. Есть разделы про code splitting с несколькими точками входа и динамическими импортами, про аннотации /*#__PURE__*/ и поле sideEffects для лучшего tree-shaking, а также про watch-режим и команду rollup -c -w.
Скилл советует не бандлить peer-зависимости и не тащить CommonJS туда, где есть ES-модули. Для библиотек с TypeScript он напоминает про файлы деклараций — без них типы у потребителей не подхватятся. Конфигурация рассчитана на Node.js и установленный Rollup; для анализа размера бандла упоминается rollup-plugin-visualizer.
Скилл лежит в репозитории Mindrally/skills и ставится одной командой под нужную платформу.
Какие задачи решает
- собрать библиотеку сразу в
esm,cjsиumd - вынести
reactиlodashвexternal, чтобы не раздувать бандл - настроить
@rollup/plugin-typescriptс отдельнымtsconfig.json - включить tree-shaking через именованные экспорты и
sideEffects - разбить пакет на несколько точек входа с общим кодом
Примеры запросов агенту
- Настрой
rollup.config.mjsдля библиотеки: входsrc/index.ts, выходыesmиcjsсо sourcemap - Помоги вынести peer-зависимости из
package.jsonвexternalи добавьglobalsдля UMD-сборки - Добавь в конфиг watch-режим с
include: 'src/**'и подключи@rollup/plugin-terser
Как установить rollup-bundler
1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill rollup-bundler -a claude-code2Вручную: положить файлы
~/.claude/skills/rollup-bundler/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/rollup-bundler/
1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill rollup-bundler -a codex2Вручную: положить файлы
.agents/skills/rollup-bundler/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill rollup-bundler -a cursor2Вручную: положить файлы
.cursor/skills/rollup-bundler/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Mindrally/skills rollup-bundler2Вручную: положить файлы
.github/skills/rollup-bundler/SKILL.md1Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill rollup-bundler -a gemini-cli2Командой платформы
gemini skills install https://github.com/Mindrally/skills --path rollup-bundlerВручную: положить файлы
.devin/skills/rollup-bundler/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add Mindrally/skills --skill rollup-bundler -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о rollup-bundler
Как установить rollup-bundler в Claude?
Выполните npx skills add Mindrally/skills --skill rollup-bundler -a claude-code. Скилл появится в ~/.claude/skills/rollup-bundler/SKILL.md.
Что делает rollup-bundler?
Даёт агенту правила конфигурации Rollup.js: форматы вывода, плагины, внешние зависимости, code splitting и tree-shaking. Пригодится при сборке библиотек и пакетов.
Для каких платформ подходит этот скилл?
Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для каждой платформы своя команда установки и свой путь к SKILL.md.
Исходный текст
SKILL.md · Apache-2.0
---
name: rollup-bundler
description: Best practices and guidelines for Rollup.js module bundler configuration, ES modules, and library bundling
metadata:
maintainer: Mindrally
source: https://github.com/Mindrally/skills
---
# Rollup Bundler
You are an expert in Rollup.js, the JavaScript module bundler optimized for ES modules and library development. Follow these guidelines when working with Rollup configurations.
## Core Principles
- Rollup is designed for ES modules and produces cleaner, smaller bundles
- Superior tree-shaking through deep execution path analysis
- Ideal for libraries and packages that will be consumed by other projects
- Focus on producing efficient, readable output code
## Project Structure
```
project/
├── src/
│ ├── index.js # Main entry point
│ ├── modules/ # Internal modules
│ └── utils/ # Utility functions
├── dist/ # Build output
│ ├── bundle.esm.js # ES module format
│ ├── bundle.cjs.js # CommonJS format
│ └── bundle.umd.js # UMD format
├── rollup.config.mjs # Configuration file
└── package.json
```
## Configuration Basics
### Basic Configuration
```javascript
// rollup.config.mjs
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
sourcemap: true
}
};
```
### Multiple Output Formats
```javascript
export default {
input: 'src/index.js',
output: [
{
file: 'dist/bundle.esm.js',
format: 'esm',
sourcemap: true
},
{
file: 'dist/bundle.cjs.js',
format: 'cjs',
sourcemap: true
},
{
file: 'dist/bundle.umd.js',
format: 'umd',
name: 'MyLibrary',
sourcemap: true
}
]
};
```
## Output Formats
### ES Modules (esm)
- Keeps bundle as ES module file
- Best for modern bundlers and browsers
- Supports tree-shaking in consuming projects
### CommonJS (cjs)
- For Node.js environments
- Compatible with require() syntax
### UMD (Universal Module Definition)
- Works as AMD, CJS, and IIFE
- Best for libraries that need broad compatibility
### IIFE (Immediately Invoked Function Expression)
- Self-executing function
- Suitable for script tags in browsers
## ES Modules Best Practices
### Use Named Exports
```javascript
// Prefer named exports for better tree-shaking
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
// Avoid default exports when possible
// export default { add, subtract }; // Less tree-shakeable
```
### Static Imports
```javascript
// Static imports enable tree-shaking
import { specificFunction } from './utils';
// Avoid dynamic requires in library code
// const utils = require('./utils'); // CommonJS - no tree-shaking
```
## Essential Plugins
### Node Resolve
```javascript
import resolve from '@rollup/plugin-node-resolve';
export default {
plugins: [
resolve({
browser: true,
preferBuiltins: false
})
]
};
```
### CommonJS Conversion
```javascript
import commonjs from '@rollup/plugin-commonjs';
export default {
plugins: [
commonjs()
]
};
```
### Babel Transpilation
```javascript
import babel from '@rollup/plugin-babel';
export default {
plugins: [
babel({
babelHelpers: 'bundled',
presets: ['@babel/preset-env']
})
]
};
```
### TypeScript Support
```javascript
import typescript from '@rollup/plugin-typescript';
export default {
input: 'src/index.ts',
plugins: [
typescript({
tsconfig: './tsconfig.json'
})
]
};
```
### Minification
```javascript
import terser from '@rollup/plugin-terser';
export default {
plugins: [
terser()
]
};
```
### Environment Variables
```javascript
import replace from '@rollup/plugin-replace';
export default {
plugins: [
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify('production')
})
]
};
```
## External Dependencies
### Marking Dependencies as External
```javascript
export default {
input: 'src/index.js',
external: ['react', 'react-dom', 'lodash'],
output: {
file: 'dist/bundle.js',
format: 'esm',
globals: {
react: 'React',
'react-dom': 'ReactDOM'
}
}
};
```
### Peer Dependencies Pattern
```javascript
import pkg from './package.json';
export default {
external: [
...Object.keys(pkg.peerDependencies || {}),
...Object.keys(pkg.dependencies || {})
]
};
```
## Code Splitting
### Multiple Entry Points
```javascript
export default {
input: {
main: 'src/index.js',
utils: 'src/utils/index.js'
},
output: {
dir: 'dist',
format: 'esm'
}
};
```
### Dynamic Imports
```javascript
// Rollup handles dynamic imports automatically
async function loadModule() {
const module = await import('./heavy-module.js');
return module.default;
}
```
## Tree Shaking Optimization
### Pure Function Annotations
```javascript
// Mark functions as pure for better tree-shaking
export const compute = /*#__PURE__*/ createCompute();
```
### Side Effects Configuration
```json
{
"name": "my-library",
"sideEffects": false
}
```
## Watch Mode
```javascript
// rollup.config.mjs
export default {
watch: {
include: 'src/**',
clearScreen: false
}
};
```
Command line:
```bash
rollup -c -w
```
## Package.json Configuration
```json
{
"name": "my-library",
"version": "1.0.0",
"main": "dist/bundle.cjs.js",
"module": "dist/bundle.esm.js",
"browser": "dist/bundle.umd.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"import": "./dist/bundle.esm.js",
"require": "./dist/bundle.cjs.js"
}
},
"files": ["dist"],
"sideEffects": false
}
```
## Best Practices
### Do
- Use ES6 module syntax consistently
- Mark third-party dependencies as external
- Generate source maps for debugging
- Use named exports for better tree-shaking
- Test all output formats
- Use watch mode during development
### Avoid
- Bundling peer dependencies
- Using CommonJS modules when ES modules are available
- Ignoring bundle size
- Skipping TypeScript declaration files for libraries
## Common Configuration Patterns
### Library Configuration
```javascript
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import terser from '@rollup/plugin-terser';
import pkg from './package.json';
export default {
input: 'src/index.ts',
external: Object.keys(pkg.peerDependencies || {}),
plugins: [
resolve(),
commonjs(),
typescript({ tsconfig: './tsconfig.json' }),
terser()
],
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.module, format: 'esm', sourcemap: true }
]
};
```
## Debugging and Analysis
- Use `--configDebug` flag for configuration debugging
- Generate source maps for all formats
- Use rollup-plugin-visualizer for bundle analysis
- Check output code readability
© Mindrally · Apache-2.0 · Mindrally/skills