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), ми можемо досить швидко автоматизувати складання, відправку в репозитарій або бекап проекту.