首頁 > 後端開發 > php教程 > PHP主|使用作曲家腳本構建自動化

PHP主|使用作曲家腳本構建自動化

Lisa Kudrow
發布: 2025-02-25 20:37:19
原創
932 人瀏覽過

態遵循亞歷山大·科格諾(Alexander Cogneau)與作曲家的依賴管理簡介 ,您現在知道作曲家是管理外部項目依賴和版本限制的解析器。但這就是一切嗎?在本文中,我將向您展示如何也可以將作曲家用作基本的構建自動化工具。

鑰匙要點

    除了作為管理外部項目依賴性和版本限制的解析器外,
  • >作曲家還可以用作基本的構建自動化工具。它暴露了pre
  • >和post
  • 在執行過程中,
  • install/update/卸載事件掛鉤可以為一系列自動任務腳本腳本。
>作曲家腳本

任何值得鹽的構建自動化工具都必須提供腳本腳本一系列自動任務的能力 - 從建造,包裝和運行測試套件到分期和生產系統的部署。例如,Phing基於ANT,允許您在XML構建文件中定義此類任務。 作曲家在這方面有所不同,因為它對這些任務是什麼,或者根本沒有執行這些任務。相反,作曲家的作用是在執行過程中揭示其前和後安裝/卸載事件掛鉤,您可以使用“腳本”回調,就像Pyrus提供的能力一樣,可以通過package.xml中定義自定義命令。 - Plugin選項的安裝,升級和卸載命令。 腳本屬性是在您的root軟件包的composer.json的root json對像中定義的 文件。您可以定義任何數量的PHP靜態方法(必須由作曲家的自動加載機制自動加載),命令行可執行文件或兩者的組合。 然後,在作曲家的執行過程中調用了這些腳本定義的任何自定義代碼或軟件包特定命令。注意的是,僅執行了根包的作曲家中定義的腳本。作曲家將不會執行根軟件包依賴關係中指定的任何腳本。 在作曲家執行過程中發射以下事件:

    > pre-install-cmd - 發生在執行安裝命令之前
  • >後安裝-CMD - 發生在執行安裝命令
  • 之後
  • > pre-preddate-cmd - 發生在執行更新命令之前
  • > tost-update-cmd - 發生在執行更新命令之後
  • >之後
  • >預包裝安裝 - 發生在安裝軟件包
  • >之前
  • >後包裝安裝 - 在安裝軟件包
  • 之後發生
  • >預包裝 - 發生在更新軟件包之前發生
  • >後包 - 在更新軟件包後發生
  • >
  • >預包裝 - uninstall - 發生在包裝卸載
  • 之前
  • > package-uninstall - 在包裝卸載
  • 之後發生
這些是相當不言自明的,我認為您會同意美麗在於它的簡單性。但要說明,這是一個示例root軟件包composer.json:
<span>{
</span>    <span>"name": "MyProject",
</span>    <span>"description": "An example to demonstrate the use of Composer scripts",
</span>    <span>"version": "1.0.0",
</span>    <span>"require": {
</span>        <span>"php": ">=5.3",
</span>        <span>"ext-xsl": "*",
</span>        <span>"ext-imap": "*",
</span>        <span>"ext-gd": "*"
</span>      <span>},
</span>
    <span>"autoload": {
</span>        <span>"psr-0": {
</span>            <span>"MyProject": "src/"
</span>        <span>}
</span>    <span>},
</span>
    <span>"scripts": {
</span>        <span>"pre-install-cmd": "MyProject\Installer::preInstall",
</span>        <span>"post-install-cmd": [
</span>            <span>"MyProject\Installer::postInstall"
</span>        <span>],
</span>        <span>"post-package-install": [
</span>            <span>"MyProject\Installer::postPackageInstall",
</span>            <span>"phpunit -c /tests",
</span>            <span>"./bin/install.sh"
</span>        <span>]
</span>    <span>}
</span><span>}</span>
登入後複製
我為預安裝CMD,後安裝後CMD和包裝後安裝事件定義了一些腳本。如您所見,我們可以定義靜態PHP方法和命令行可執行文件的任何組合。在包裝後安裝事件的情況下,它還執行一些單元測試和自定義安裝腳本。 這是我們的示例腳本的樣子:
<span><span><?php
</span></span><span><span>namespace MyProject;
</span></span><span><span>use ComposerScriptEvent;
</span></span><span>
</span><span><span>class Installer
</span></span><span><span>{
</span></span><span>    <span>public static function preInstall(Event $event) {
</span></span><span>        <span>// provides access to the current ComposerIOConsoleIO
</span></span><span>        <span>// stream for terminal input/output
</span></span><span>        <span>$io = $event->getIO();
</span></span><span>        <span>if ($io->askConfirmation("Are you sure you want to proceed? ", false)) {
</span></span><span>            <span>// ok, continue on to composer install
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>// exit composer and terminate installation process
</span></span><span>        <span>exit;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public static function postInstall(Event $event) {
</span></span><span>        <span>// provides access to the current Composer instance
</span></span><span>        <span>$composer = $event->getComposer();
</span></span><span>        <span>// run any post install tasks here
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public static function postPackageInstall(Event $event) {
</span></span><span>        <span>$installedPackage = $event->getComposer()->getPackage();
</span></span><span>        <span>// any tasks to run after the package is installed?
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登入後複製
當這些事件中的每個事件都被解僱時,作曲家的內部事件處理程序將ComposersCriptevent對像作為第一個(也是唯一的)參數傳遞給每個回調。活動 對象將其他作曲家對象的以下獲取器曝光到您的回調:
  • getComposer() - 返回CompoSercosser的當前實例
  • > getName() - 返回要觸發的事件的名稱
  • > getio() - 返回當前輸入/輸出流,該流將ComposerioioioioInterface實現用於讀取/寫入控制台
  • >
您可以針對每個方法簽名的Composer API文檔,以及這些對像中每個對象的其他方法,尤其是Composer實例和IO接口。 儘管這種看似基本的實現可能並不像phing的定義那樣“強大”,但其簡單性掩蓋了它令人難以置信的靈活性。它利用您在PHP中的現有知識投資,並且有了一些創造力和想像力,您可以使用Composer的依賴性解決方案和本機PHP腳本來創建一些相當複雜的構建和刪除任務。您甚至可以將其集成到Jenkins中以進行連續集成。

摘要

在本文中,我介紹了一個基本的示例,說明瞭如何使用作曲家腳本來執行構建自動化。這些任務可以像您需要的那樣簡單或複雜,因為它們利用了您在PHP中的現有知識投資。 希望本文將激發您使用作曲家不僅僅是依賴性管理。有關如何使用Composer腳本的更多信息,請參見GetComposer.org/doc/articles/scripts.md。 通過fotolia 圖像 >常見問題(常見問題解答)有關用作曲家腳本構建自動化

>作曲家在PHP開發中的主要功能是什麼?它使您可以聲明您的項目取決於的庫,並且它將為您管理(安裝/更新)。作曲家與YUM或APT的意義相同。是的,它處理“軟件包”或庫,但每項項目管理它們,將它們安裝在您的項目中的目錄(例如供應商)中。

>

>如何使用Composer腳本自動化任務?

>我可以使用Composer腳本進行測試嗎?您可以在Composer.json文件中定義一個運行測試的腳本。例如,您可以定義一個稱為“測試” phpunit的腳本。然後,您可以使用“ Composer Run-Script Test”命令從命令行運行測試。

>如何使用Composer腳本進行部署?

COMPOSER腳本可用於部署通過在Composer.json文件中定義腳本,該文件執行部署應用程序的必要步驟。這可能包括諸如編譯資產,優化代碼和將文件上傳到服務器之類的任務。定義腳本後,您可以使用'Composer Run-Script'命令從命令行中運行它。

作曲家腳本可以運行自定義PHP代碼嗎?

是的,Composer腳本可以運行自定義PHP代碼。您可以在Composer.json文件中定義一個運行PHP文件的腳本。 PHP文件可以包含您想要的任何代碼。當您使用“ Composer Run-script”命令運行腳本時,將執行PHP代碼。

>

>如何在Composer中管理Composer中的腳本? .json文件。每個腳本被定義為鍵值對,關鍵是腳本的名稱,值是要運行的命令。您可以通過編輯composer.json文件來添加,修改或刪除腳本。

我可以使用Composer腳本來自動化構建過程嗎?

是的,Composer腳本可用於自動化構建過程。通過在Composer.json文件中定義腳本,您可以自動化任務,例如編譯代碼,縮小資產和生成文檔。然後可以使用“ Composer Run-Script”命令從命令行中運行這些腳本。

>

>使用Composer腳本進行自動化有什麼好處?您的開發過程效率更高。通過自動化重複任務,您可以節省時間並減少錯誤的風險。作曲家腳本也使您的構建過程更加一致,因為每次以相同的方式執行相同的任務。

>

我可以將Composer腳本與其他工具結合使用嗎?可以與其他工具一起使用。例如,您可以使用作曲家腳本來運行GULP任務,也可以運行Phpunit測試套件。這使您可以利用其他工具的功能,同時仍能從作曲家腳本提供的自動化中受益。

>我如何了解有關使用作曲家腳本進行自動化的更多信息?

>有很多資源可幫助您了解有關使用Composer腳本進行自動化的更多信息。官方的作曲家文檔是一個不錯的起點。在線提供了許多教程和博客文章,提供了使用作曲家腳本的示例和最佳實踐。

>

以上是PHP主|使用作曲家腳本構建自動化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板