Phing - Складання PHP проектів

1. Знайомство

Отже, знайомтеся - Phing. Своєрідний PHP ремікс Ant`а, але простіший в освоєнні, і в той же час досить потужний. Phing дозволяє вирішувати тривіальні для PHP проектів завдання, має безліч вбудованих засобів і непоганий API, на випадок якщо вбудованих коштів все ж таки буде недостатньо. Керувати збиранням ми можемо за допомогою XML файлів, в яких описуємо цілі та завдання, що виконуються в процесі збирання проекту.

2. Встановлення

Phing - найпростіше встановити з репозитарію PEAR.

Бажаючі використати найсвіжіші версії можуть встановити бету.

А для тих хто хоче допомогти проекту, або просто подивитися, як він влаштований - є SVN (dev версія продукту - може містити баги!).

Також можна завантажити повніші пакети зі сторінки завантаження на офіційному сайті.

3. Hello World!

Приклад(build.xml):

Спробуємо розібрати файл за командами.

Наведений вище код оголошує проект з ім'ямmake_projectта базовою директорією, на один рівень вищий, ніж файл складання, та початковою метоюbuild. При цьому метаbuildмає залежність (властивістьdepends) від метиclear_cache_dir. Ще вище ми бачимо опис метиclear_cache_dir. Ця мета має 2 завдання: 1.echo- виведення рядка «Очищаємо директорії кешу» 2.delete— рекурсивне очищення директорій /assets/ та /runtime/

Для інтересу спробуємо ускладнити завдання. Нехай тепер нам потрібно скомпілювати .less файли в проекті. Описуємо задачу:

Для початку розглянемоfileset— завдання, що створює список файлів за певним критерієм. Нашfilesetмає лише одну властивістьinclude(включення файлів) із шаблоном**/assets/css/*.less, де ** — директоріядовільної вкладеності. Тобтоfilesetмає таку умову: шукати файли з розширенням.lessщо лежать у директоріях/assets/css/які у свою чергу знаходяться в довільних директоріях вкладених у $src_dir>(див. код вище). Далі ми проходимося по списку знайдених файлів за допомогою завданняforeach, відправляючи кожен знайдений файл у змінній $current_file>(param— змінна в якій поточне значення списку буде передано цільової задачі) в задачуless_exec(target— цільове завдання, що обробляє кожне значення списку).less_exec— лише вставляє шлях до файлу у виклик командиlesscу терміналі, і вказує як вихідний файл шлях до.lessфайлу +.css. у результаті всі.lessфайли в проекті будуть скомпілювані в%filename%.less.css. При бажанні можна написати завдання, що перейменовує ці файли в стандартний .css або мініфікує їх, але це ми залишимо як домашнє завдання читачам.

Чи не так? А враховуючи, що Phing має досить великі вбудовані засоби (JsMin, JsLint, tar і навіть засоби взаємодії з різними VCS), ми можемо досить швидко автоматизувати складання, відправку в репозитарій або бекап проекту.