После разработки и тестирования плагина следующим этапом становится его публикация в реестре npm. Размещение пакета в npm позволяет использовать его в любых проектах через стандартные инструменты экосистемы JavaScript, обеспечивая удобную установку, обновление и управление зависимостями.
Для плагинов Rollup публикация в npm фактически делает их частью общей экосистемы сборщика. Разработчики получают возможность подключать расширение через конфигурацию Rollup без ручного копирования исходного кода.
Перед публикацией необходимо убедиться, что структура пакета соответствует принятым стандартам.
Типичная структура проекта:
rollup-plugin-example/
├── src/
│ └── index.js
├── dist/
│ └── index.js
├── test/
├── package.json
├── README.md
├── LICENSE
└── rollup.config.js
Наиболее важными файлами являются:
| Файл | Назначение |
|---|---|
| package.json | Метаданные пакета |
| README.md | Документация |
| LICENSE | Лицензия |
| dist/index.js | Готовая сборка |
| package-lock.json | Зафиксированные версии зависимостей |
Основная информация о публикуемом пакете хранится в
package.json.
Пример:
{
"name": "rollup-plugin-example",
"version": "1.0.0",
"description": "Example Rollup plugin",
"main": "dist/index.js",
"type": "module",
"keywords": [
"rollup",
"rollup-plugin"
],
"author": "John Doe",
"license": "MIT"
}
Особое внимание следует уделить следующим полям.
Имя пакета должно быть уникальным внутри npm.
Примеры:
{
"name": "rollup-plugin-svg-optimizer"
}
или
{
"name": "@company/rollup-plugin-svg-optimizer"
}
Scoped-пакеты позволяют публиковать пакеты внутри пространства имён организации или пользователя.
Версия должна соответствовать правилам SemVer.
Примеры:
1.0.0
1.2.5
2.0.0
Структура:
MAJOR.MINOR.PATCH
Где:
Краткое описание помогает пользователям понять назначение пакета.
{
"description": "Rollup plugin for replacing environment variables"
}
Ключевые слова улучшают поиск пакета в каталоге npm.
{
"keywords": [
"rollup",
"plugin",
"build",
"bundler"
]
}
Для плагинов Rollup рекомендуется обязательно указывать:
{
"keywords": [
"rollup",
"rollup-plugin"
]
}
Полезно указывать адрес репозитория.
{
"repository": {
"type": "git",
"url": "https://github.com/user/rollup-plugin-example.git"
}
}
Это позволяет пользователям быстро находить исходный код.
Ссылка на домашнюю страницу проекта.
{
"homepage": "https://github.com/user/rollup-plugin-example"
}
Секция для отправки сообщений об ошибках.
{
"bugs": {
"url": "https://github.com/user/rollup-plugin-example/issues"
}
}
Современные пакеты всё чаще используют поле exports.
Пример:
{
"exports": {
".": "./dist/index.js"
}
}
Если предусмотрены дополнительные точки входа:
{
"exports": {
".": "./dist/index.js",
"./utils": "./dist/utils.js"
}
}
Поле exports позволяет явно контролировать публичное API
пакета.
Если плагин предоставляет декларации типов, необходимо указать их расположение.
{
"types": "dist/index.d.ts"
}
Пользователи TypeScript получат автодополнение и проверку типов автоматически.
По умолчанию npm публикует практически всё содержимое каталога.
Чтобы избежать публикации лишних файлов, используется поле
files.
{
"files": [
"dist",
"README.md",
"LICENSE"
]
}
После этого npm включит только перечисленные файлы.
Альтернативный вариант — файл .npmignore.
Пример:
test/
coverage/
.vscode/
.github/
Однако поле files считается более надёжным и
предсказуемым способом контроля содержимого пакета.
README является главным источником информации о плагине.
Качественная документация обычно содержит:
# rollup-plugin-example
Plugin for transforming custom assets.
npm install rollup-plugin-example
import example from 'rollup-plugin-example';
export default {
plugins: [
example()
]
};
example({
minify: true
});
example({
include: '**/*.txt'
});
MIT
Хорошая документация часто влияет на популярность пакета не меньше, чем качество кода.
Без лицензии пользователи не всегда понимают условия использования пакета.
Наиболее популярный вариант:
MIT License
Файл:
LICENSE
Поле в package.json:
{
"license": "MIT"
}
Перед отправкой пакета в реестр полезно проверить, что именно попадёт в архив.
Для этого используется команда:
npm pack
Будет создан архив:
rollup-plugin-example-1.0.0.tgz
Одновременно npm покажет список файлов, которые войдут в пакет.
Полученный архив можно установить локально.
npm install ./rollup-plugin-example-1.0.0.tgz
Такой подход помогает убедиться, что пакет будет работать после публикации.
Для публикации необходим аккаунт npm.
После регистрации выполняется авторизация:
npm login
Консоль запросит:
Username:
Password:
Email:
После успешной авторизации данные будут сохранены локально.
Проверить текущего пользователя можно командой:
npm whoami
После завершения подготовки выполняется команда:
npm publish
Если имя пакета свободно, публикация будет успешно завершена.
Для scoped-пакетов может потребоваться:
npm publish --access public
Например:
npm publish --access public
для пакета:
{
"name": "@mycompany/rollup-plugin-example"
}
Информация о пакете доступна через:
npm view rollup-plugin-example
Также можно проверить установку:
npm install rollup-plugin-example
Если пакет устанавливается без ошибок, публикация выполнена корректно.
npm запрещает публиковать одну и ту же версию повторно.
Перед новой публикацией необходимо изменить версию.
Автоматическое увеличение PATCH:
npm version patch
Результат:
1.0.0 → 1.0.1
Увеличение MINOR:
npm version minor
Результат:
1.0.0 → 1.1.0
Увеличение MAJOR:
npm version major
Результат:
1.0.0 → 2.0.0
После изменения версии выполняется:
npm publish
Перед публикацией часто требуется выполнить сборку проекта.
Для этого используется скрипт:
{
"scripts": {
"build": "rollup -c",
"prepublishOnly": "npm run build"
}
}
При запуске:
npm publish
npm автоматически выполнит:
npm run build
и только затем опубликует пакет.
Дополнительно можно запускать тесты.
{
"scripts": {
"test": "vitest",
"prepublishOnly": "npm test && npm run build"
}
}
Если тесты завершатся ошибкой, публикация будет отменена.
Во многих проектах публикация выполняется автоматически после создания тега.
Пример последовательности:
Пример тега:
git tag v1.2.0
git push origin v1.2.0
После появления тега система непрерывной интеграции может автоматически выпустить новую версию пакета.
Для тестирования новых функций используются теги npm.
Публикация:
npm publish --tag beta
Установка:
npm install rollup-plugin-example@beta
Это позволяет распространять экспериментальные версии без влияния на стабильный релиз.
Просмотр тегов:
npm dist-tag ls rollup-plugin-example
Добавление нового тега:
npm dist-tag add rollup-plugin-example@2.0.0 next
Результат:
latest -> 1.5.0
next -> 2.0.0
Полное удаление опубликованных пакетов сильно ограничено политикой npm.
Для устаревших пакетов чаще используется пометка:
npm deprecate rollup-plugin-example "Use rollup-plugin-new instead"
При установке пользователи увидят предупреждение.
Для публичных плагинов распространён формат:
rollup-plugin-*
Примеры:
rollup-plugin-svg
rollup-plugin-assets
rollup-plugin-config
Для официальных или корпоративных решений часто используются scoped-пакеты:
@company/rollup-plugin-assets
@company/rollup-plugin-images
Такой подход снижает вероятность конфликтов имён и упрощает управление экосистемой пакетов внутри организации.
Последовательность действий обычно выглядит следующим образом:
npm test
npm run build
npm version patch
git push
git push --tags
npm publish
Либо при автоматизированном релизе:
npm test
npm run build
git tag v1.3.0
git push origin v1.3.0
После завершения публикации пакет становится доступен всем пользователям npm и может подключаться в проектах Rollup через стандартный механизм зависимостей, участвуя в общей экосистеме плагинов и расширений сборщика.