Работа в режиме библиотечной сборки в Parcel требует понимания того, как инструмент разделяет сценарии приложения и сценарии публикации пакета. В обычном веб-приложении Parcel ориентирован на HTML как точку входа, на автоматическую оптимизацию ассетов и на интеграцию с dev-сервером. В библиотечном режиме поведение меняется: сборщик перестаёт исходить из предположения, что результат будет запускаться как страница, и начинает формировать артефакты, пригодные для установки через npm и использования в других проектах.
Библиотечная сборка в Parcel ориентирована на получение переиспользуемого JavaScript-пакета, который может поставляться в нескольких форматах: ESModules, CommonJS, UMD. В этом режиме важны другие характеристики:
Флаг isLibrary выступает индикатором того, что сборка
предназначена не для браузерного приложения, а для распространения как
зависимости.
Parcel v2 использует систему targets, которая описывает, как именно должен быть собран каждый выходной артефакт пакета. Библиотечный режим задаётся через конфигурацию цели сборки.
Типичная структура package.json:
{
"source": "src/index.js",
"main": "dist/main.cjs",
"module": "dist/main.mjs",
"targets": {
"main": {
"context": "node",
"outputFormat": "commonjs",
"isLibrary": true,
"distDir": "dist"
},
"module": {
"context": "browser",
"outputFormat": "esmodule",
"isLibrary": true,
"distDir": "dist"
}
}
}
Параметр isLibrary указывает Parcel, что:
При включении библиотечного режима меняется внутренняя логика оптимизации.
Parcel перестаёт трактовать проект как приложение с HTML entrypoint и переходит к модели модульного графа, где:
В библиотечном режиме Parcel активнее применяет tree-shaking. При
isLibrary: true:
Это особенно важно для пакетов, где размер конечного bundle критичен.
Parcel в обычном режиме может:
В библиотечном режиме эти шаги исключаются. Результатом становятся только JavaScript-файлы и сопутствующие ассеты (CSS, если явно включено).
Библиотечная сборка с isLibrary формирует более строгую
структуру артефактов:
Пример типичного результата:
dist/
index.cjs
index.mjs
index.umd.js
Parcel автоматически синхронизирует эти файлы с настройками
package.json, такими как main,
module и browser.
При библиотечной сборке важную роль играет разделение зависимостей:
При isLibrary: true Parcel усиливает контроль за
корректностью этих границ. Ошибки часто возникают в случаях:
Библиотечный режим почти всегда подразумевает мультиформатный билд.
Формат ESModule используется для современных сборщиков:
Формат CommonJS сохраняется для:
UMD используется для универсального подключения:
<script> тегParcel автоматически адаптирует структуру экспорта под выбранный
формат при включённом isLibrary.
Библиотечная сборка требует точного указания побочных эффектов. В связке с Parcel это влияет на tree-shaking.
В package.json:
{
"sideEffects": false
}
или более точечно:
{
"sideEffects": [
"*.css",
"./src/polyfills.js"
]
}
При isLibrary: true Parcel учитывает эти настройки при
построении графа модулей.
Библиотеки часто включают стили. Parcel обрабатывает их следующим образом:
В библиотечном режиме важно контролировать:
Parcel может генерировать сопутствующие .d.ts файлы
через плагины или интеграции.
В связке с isLibrary это становится критичным,
поскольку:
Библиотека часто содержит несколько точек входа:
Parcel позволяет описывать это через targets:
{
"targets": {
"main": {
"source": "src/index.js",
"isLibrary": true
},
"utils": {
"source": "src/utils/index.js",
"isLibrary": true
}
}
}
Каждый target становится отдельным экспортируемым артефактом.
При разработке библиотек Parcel сохраняет:
Однако dev-server в библиотечном режиме не моделирует конечное потребление так же, как в приложении. Основной акцент делается на корректность экспортов, а не на визуальный слой.
При использовании isLibrary часто возникают системные
ошибки конфигурации:
sourceoutputFormat для платформыОсобенно критична ситуация, когда один и тот же target используется одновременно для приложения и библиотеки — это приводит к непредсказуемому tree-shaking и лишним runtime-обёрткам.
Библиотечный режим усиливает следующие оптимизации:
Дополнительно важно учитывать:
Результат сборки с isLibrary обычно напрямую готов к
публикации:
main, module,
exports)Parcel не управляет публикацией, но формирует структуру, которая соответствует ожиданиям npm-экосистемы.
Режим isLibrary в Parcel меняет не отдельные опции, а
модель мышления сборщика:
Именно это делает библиотечную конфигурацию фундаментально отличной от стандартной веб-сборки.