Хочу рассказать о своей последней разработке - Site builder.
Это сборщик, позволяющий преобразовывать исходники сайта (проекта). Создан на базе Ant-а, поэтому для его работы нужна Java и, собственно, сам Ant. Так как база кроссплатформена, сборщик может работать на любой системе.
За конкретные преобразования отвечают модули, управляемые ядром. На данный момент реализовано 2 модуля - это компрессоры JS и CSS. В будущем возможности будут расширяться. К примеру, следующими модулями будут генерация JSDoc и сборка спрайтов. Вообще, возможности Ant-а довольно большие и практически любую задачу можно реализовать в модуле.
Для интеграции сборщика в проект необходимо провести его базовую настройку. Речь идет об общем конфигурационном файле сборщика. Приведу пример:
{
"libraries": { // Подключение библиотек, необходимых для работы модулей.
"JSON": { // Имя библиотеки
"language": "javascript", // Язык сценария библиотеки.
"src": "JSON.js" // Путь к файлу относительно папки lib.
}
},
"modules": { // Подключение необходимых модулей.
"JS Compressor": { // Имя модуля
"src": "JS Compressor/build.xml", // Путь к файлу сценария сборки Ant относительно папки modules. Данный файл является входной точкой запуска модуля.
"configs": ["path/to/config.json"], // Список путей относительно корня модуля к конфигурационным файлам модуля. Может быть в любом формате - это уж как будет реализовано в модуле.
"depends": ["CSS Compressor"] // Список имен модулей, которые необходимо выполнить перед вызовом текущего. Необязательный параметр.
},
"CSS Compressor": {
"src": "CSS Compressor/build.xml",
"configs": ["path/to/config.json"]
}
}
}
Пути к папкам модулей, библиотек и т.д. указаны в файле build.properties относительно корня модуля.
Для сжатия JS используется гугловый компилятор, для CSS - YUI Compressor.
Далее необходимо создать конфиги модулей. Как я писал выше - каждый модуль требует создания конфига со своим форматом, параметрами и их значениями. Конфиги существующих модулей похожи:
{ // Конфиг модуля JS Compressor
"sourceDir": "src", // Корень ресурсов относительно расположения этого конфига
"destinationDir": "output", // Корень сжатых файлов
"gZipped": true, // Нужно ли создавать файлы .gz рядом со сжатыми файлами.
"compile": "simple", // Уровень компиляции для всех файлов. Может быть false, что означает без сжатия.
"files": { // Список создаваемых файлов.
"base.js": { // Имя результирующего файла. Можно указывать, например, так: path/to/base.js. Это означает, что результирующий файл будет находиться в {путь к этому конфигу}/output/path/to/base.js
"compile": "advanced", // Уровень компиляции конкретно для этого файла
"includes": ["base/"], // Файлы-источники. В данном случае будут слиты в один файл все файлы из папки src/base/. Можно указывать по маске, например "*.js".
"excludes": ["base/*.min.js", "otherFileName.js"], // Файлы, которые не будут включены в результирующий.
"caseSensetive": true // or false. Учитывать ли регистр включаемых и исключаемых файлов.
}
}
}
Как видно - всё достаточно гибко. Конфиг модуля CSS Compressor точно такой же, за исключением того, что параметр compile может иметь значения только true или false.
После настройки, сборщик можно запускать. Есть несколько различных способов: через GUI в среде разработки или из коммандной строки. В обоих случаях необходимо устанавливать параметр с именем "path.config", значением которого должен быть путь к общему конфигурационному файлу. Файлом сценария сборки Ant-а является build.xml из корня сборщика. Пример запуска:
Код:
|
ant -buildfile path/to/build.xml -Dpath.config path/to/config.json |
Цель по-умолчанию называется build и запускает все модули, определённые в общем когфиге. Если необходимо запустить определённый модуль, это можно сделать несколькими способами:
1. Через цель Run module:
Код:
|
ant -buildfile path/to/build.xml -Dpath.config path/to/config.json "Run module" |
При этом будет выдан запрос на ввод имени модуля (в консоли или через GUI). Стоит обратить внимание, что этим способом можно запустить только один конкретный модуль (включая зависимые). Что бы запустить несколько - воспользуйтесь вторым способом.
2. Через указание имен модулей в качестве целей:
Код:
|
ant -buildfile path/to/build.xml -Dpath.config path/to/config.json "JS Compressor" "CSS Compressor" |
Модули будут вызваны в указанном порядке.
Важный момент: если для вызываемого модуля указаны зависимые модули через параметр depends, они так же будут выполнены перед текущим.
Ссылка на исходники:
https://github.com/B-Vladi/Site-builder
Буду рад любым вопросам, предложениям, замечаниям, критике
PS: сори за "многобуков".