Исходный код библиотеки размещается в репозитории и содержит полный набор модулей, тестов, конфигураций сборки и вспомогательных инструментов. Для работы со сборкой используется стандартный стек Node.js.
Клонирование репозитория:
git clone https://github.com/Leaflet/Leaflet.git
cd Leaflet
Структура проекта после загрузки включает ключевые директории:
src/ — исходные модули библиотекиdist/ — готовые собранные файлыspec/ — тестыbuild/ — конфигурации сборкиdocs/ — документацияsrc/layer/, src/map/,
src/control/ — основные функциональные блокиСборка Leaflet требует установленной среды Node.js и пакетного менеджера npm.
npm install
В процессе установки подтягиваются зависимости для сборки, тестирования и транспиляции кода.
Основные категории зависимостей:
Исходный код Leaflet построен на модульной архитектуре. Каждый функциональный блок реализован в отдельном файле:
Map — управление картой, слоями, событиямиTileLayer — работа с тайловыми слоямиMarker — маркеры на картеPopup — всплывающие окнаControl — элементы управления интерфейсомGeoJSON — работа с геоданнымиМодули объединяются через систему сборки, а не через стандартные ES6 import/export в рантайме, что позволяет поддерживать совместимость с широким спектром браузеров.
Сборка Leaflet основана на Node.js-скриптах и инструменте Rollup.
Основная логика сборки описана в package.json.
Основные команды:
npm run build
Эта команда выполняет полный цикл сборки:
dist/После выполнения сборки создаются несколько вариантов библиотеки:
dist/leaflet-src.js — собранный, но не минифицированный
кодdist/leaflet.js — минифицированная версия для
продакшенаdist/leaflet.css — стили библиотекиdist/images/ — графические ресурсыРазделение на версии позволяет использовать библиотеку как в отладочном, так и в производственном режиме.
Для работы с изменениями исходного кода используется режим наблюдения:
npm run watch
В этом режиме:
src/dist/leaflet-src.jsRollup применяется для объединения модулей в единый файл. Конфигурация определяет входную точку и набор плагинов.
Ключевые особенности конфигурации:
src/Leaflet.jsУпрощённая логика конфигурации:
export default {
input: 'src/Leaflet.js',
output: {
file: 'dist/leaflet-src.js',
format: 'iife'
},
plugins: [
resolve(),
commonjs(),
babel()
]
};
Исходный код Leaflet может содержать современные возможности JavaScript, которые преобразуются для поддержки старых браузеров.
Babel выполняет:
Настройки задаются в конфигурации Babel:
{
"presets": ["@babel/preset-env"]
}
Минификация выполняется в процессе сборки production-версии.
Основные задачи:
Результат — файл leaflet.js, оптимизированный для
загрузки в браузере.
Собранный исходный файл используется для отладки и разработки:
<link rel="stylesheet" href="dist/leaflet.css">
<script src="dist/leaflet-src.js"></script>
Отладочная версия сохраняет читаемость кода и подробные имена функций, что облегчает анализ поведения библиотеки.
Leaflet включает набор автоматических тестов, проверяющих корректность работы основных компонентов.
Запуск тестов:
npm test
Тестовая система основана на Mocha и Chai.
Проверяются:
Тесты расположены в каталоге spec/ и повторяют структуру
src/:
spec/map/spec/layer/spec/control/Каждый тестовый файл соответствует конкретному модулю и проверяет его поведение в изолированной среде.
Помимо JavaScript, сборочный процесс включает обработку стилей.
Файл leaflet.css формируется из исходных CSS-частей,
содержащихся в src/.
Графические ресурсы копируются в dist/images/ без
изменений.
После выполнения сборки содержимое dist/ может
использоваться как самостоятельная библиотека.
Типичная структура подключения:
dist/
leaflet.js
leaflet-src.js
leaflet.css
images/
Подобная организация обеспечивает независимость от исходного репозитория.
Сборка может быть модифицирована для исключения ненужных компонентов. Это позволяет уменьшить размер итогового файла.
Примеры возможных изменений:
Настройка осуществляется через изменение входных модулей в Rollup-конфигурации.
Каждый модуль Leaflet имеет чётко определённые зависимости. Пример:
Map зависит от EventedTileLayer зависит от GridLayerPopup зависит от DivOverlayСвязи реализуются через внутреннюю систему классов библиотеки, а не через внешние импортируемые пакеты.
Собранная версия ориентирована на максимальную совместимость. В процессе сборки учитываются ограничения:
Для анализа итогового файла используются:
Source maps позволяют сопоставлять минифицированный код с исходными
модулями src/.
Собранный код Leaflet может быть встроен в современные системы сборки приложений:
В таких случаях чаще используется пакетная версия через npm:
npm install leaflet
Однако при работе с исходниками применяется локальная сборка из репозитория.
Сборка формирует полностью автономный набор файлов, включающий:
Эти артефакты используются для публикации и интеграции в веб-приложения различного уровня сложности.