搜尋
首頁開發工具composerComposer 套件開發有這麼簡單?

下面由composer教學欄位帶大家介紹Composer產生環境 ,希望對需要的朋友有幫助!

Composer 套件開發有這麼簡單?

composer 是用來幹嘛的?

對於不了解composer的同學來說,一定會有這個疑問。

這個字常在網路上看到,特別是在GitHub 中,在使用<span class="typ" style="font-size:14px;">Laravel</span><span class="typ" style="font-size:14px;">Yii</span> 時也常看到這個詞,在安裝的時候推薦使用composer 安裝?難道只是安裝的時候使用嗎?我也使用過其他框架,為什麼 <span class="typ" style="font-size:14px;">Thinkphp</span><span class="typ" style="font-size:14px;">Codeigniter</span># 不用composer安裝呢?

帶著這些疑問,我們進行學習。

composer 官方網址:https://www.phpcomposer.com

composer 是 PHP(5.3 ) 用來管理依賴關係的工具。

長久以來,PHP的開源方式都是專案級的,就是說一開源就是一個項目,例如一整套的CMS(Dede、WordPress、discuz)、一整套框架(Thinkphp、Codeigniter)。為啥呢?其中一個很重要的原因是你不好拆開,如果拆開的話,沒有一個有效的管理工具組合起來,導致拆開的小模組大家無人問津。

然後 composer 出現了,它就是一個有效的管理工具,它負責管理大家拆開的小模組,然後進行有效的整合,使之成為一個完整的專案。

例如,記錄日誌使用 monolog/monolog ,HTTP client使用:guzzlehttp/guzzle 等等。

composer 套件的平台:https://packagist.org,這裡麵包含了大量的優秀的安裝包,我們就很輕鬆一個 composer 命令就可以將優秀的程式碼用到我們專案中來。

身為一個驕傲PHPer,我們總不能永遠只使用別人的開發包,我們必須自己動手開發一個包給別人用,給自己用。

我們既然知道了它有這麼多的好處,就讓我們去學習他吧,先從 composer 的安裝說起。

composer 是如何安裝的?

官方入門文件:https://docs.phpcomposer.com/00-intro.html

Composer 套件開發有這麼簡單?

透過上述的方法,可以進行安裝完成。

接下來我們以 GitHub 結合 Composer 工具來進行範例講解如何開發一個 Composer 套件。

composer 套件是如何開發的?

例如,開發一個處理數字的 composer 套件。

在GitHub上建立一個專案

  1. #登入GitHub(如果沒有帳號,請建立),點擊右上角“ ”,選擇“ New repository」。

  2. 在創建介面中,Repository name 填寫“numberFormat”,Description是選填的,暫時先不填, 接著在Public (GitHub推薦的方式,免費,所有人都能訪問)和Private(收費,指定人才能訪問,2019-01-09後對個人開發者免費了)中選擇“Public”,接著在勾選“Initialize this repository with a README”,點擊“Create Repository”按鈕後建立成功。

至此,表示在GitHub上已經建立了一個名為「numberFormat」的空專案。

接下來,需要將遠端的專案 clone 到本機(Git命令列、Git客戶端)進行編碼。

學習建立composer.json

composer.json 有哪些參數,如何寫,請參考文件:https://docs.phpcomposer.com/04-schema.html#composer.json

一個專案要呼叫開發包,透過composer.json就可以知道該樣去載入檔案。

composer.json 可以使用两个方式创建,一种是 <span class="pln" style="font-size:14px;">composer init</span>,另一种是手工创建。

咱们一起先执行下 <span class="pln" style="font-size:14px;">composer init</span> 看看效果。

在本地创建numberFormat目录,然后 git clone 刚才创建的项目。

//进入到本地numberFormat目录	
composer init	
Welcome to the Composer config generator	
This command will guide you through creating your composer.json config.	
Package name (<vendor>/<name>) [root/number-format]:number-format/number-format	
Description []:一个处理数字的包	
Author [XinLiang <109760455@qq.com>, n to skip]:  //回车	
Minimum Stability []: //回车	
Package Type (e.g. library, project, metapackage, composer-plugin) []: //回车	
License []: //回车	
Define your dependencies.	
Would you like to define your dependencies (require) interactively [yes]?no	
Would you like to define your dev dependencies (require-dev) interactively [yes]?no	
{	
    "name": "number-format/number-format",	
    "description": "一个处理数字的包",	
    "authors": [	
        {	
            "name": "XinLiang",	
            "email": "109760455@qq.com"	
        }	
    ],	
    "require": {}	
}	
Do you confirm generation [yes]?  //回车

至此,本地numberFormat目录就看到 composer.json 文件了,当然可以直接在目录下按照这个格式进行手工创建,后期直接编辑该文件即可。

创建项目编码内容

开发包结构如下:

--src 源码目录(必须)

--tests 单元测试目录(非必须)

我们按照既定的目录结构去创建目录和文件,然后再到composer.json里面修改一下即可。

接下来,在src目录中创建一个类(NumberFormat.php):

/**	
 * 数字格式化类	
 * @author XinLiang	
 */	
namespace numberFormat;	
class NumberFormat	
{	
    /**	
     * 格式化字节	
     * @param int $num       数字	
     * @param int $precision 精准度	
     * @return string	
     */	
    public static function byte_format($num = 0, $precision = 1)	
    {	
        if ($num >= 1000000000000)	
        {	
            $num = round($num / 1099511627776, $precision);	
            $unit = &#39;TB&#39;;	
        }	
        elseif ($num >= 1000000000)	
        {	
            $num = round($num / 1073741824, $precision);	
            $unit = &#39;GB&#39;;	
        }	
        elseif ($num >= 1000000)	
        {	
            $num = round($num / 1048576, $precision);	
            $unit = &#39;MB&#39;;	
        }	
        elseif ($num >= 1000)	
        {	
            $num = round($num / 1024, $precision);	
            $unit = &#39;KB&#39;;	
        }	
        else	
        {	
            return number_format($num).&#39; Bytes&#39;;	
        }	
        return number_format($num, $precision).&#39; &#39;.$unit;	
    }	
}

修改 composer.json

{	
    "name": "number-format/number-format",	
    "description": "一个处理数字的包",	
    "authors": [	
        {	
            "name": "XinLiang",	
            "email": "109760455@qq.com"	
        }	
    ],	
    "minimum-stability": "dev",	
    "require": {	
        "php": ">=5.3.0"	
    },	
    "autoload": {	
        "psr-4": {	
            "numberFormat\\": "src/"	
        }	
    },	
    "license": "MIT"	
}

至此,我们的开发包已经完成,接下来我们来测试下这个包是否可用。

测试开发包

在本地numberFormat目录下,通过 <span class="pln" style="font-size:14px;">composer install</span> 安装

composer install	
Loading composer repositories with package information	
Updating dependencies (including require-dev)	
Nothing to install or update	
Writing lock file	
Generating autoload files	
//表示安装成功

惊奇的发现,在本地numberFormat目录多一个 <span class="pln" style="font-size:14px;">vendor</span>目录。

在tests目录创建 NumberFormatTest.php

/**	
 * 数字格式化测试类	
 * @author XinLiang	
 */	
require &#39;../vendor/autoload.php&#39;;	
use \numberFormat;	
$number = &#39;102400010&#39;;	
echo numberFormat\NumberFormat::byte_format($number);	
//输出:97.7 MB

至此,测试成功,接下来就是要发布到packagist平台,给广大开发者见面了。

发布到 packagist 平台

packagist.org 为 composer 安装包的平台(可用GitHub账号登录)。

  1. 现将本地代码提交到GitHub。

  2. 发布到 packagist 平台,登录后在首页的右上角有一个"Submit"按钮,点击即可进入开发包提交的界面。在“Repository URL (Git/Svn/Hg)”输入框中,输入GitHub项目的地址,点击“Check”按钮,稍微等待几秒钟,会显示验证成功,并显示出“Submit”按钮,点击即完成了开发包的提交了。

恭喜你,这个开发包可以在任何支持 composer 的PHP框架中使用了。

那么问题来了,刚才我们的包写的有的简陋,后期我们维护代码,新增代码还需要按照原来的方式操作一遍吗?

不!因为我们可以在GitHub平台设置代码更新,同时能让 packagist.org 自动更新,是不是很酷!

在GitHub中找到代码仓库,然后选择"settings" -> “Webhooks” ,默认是绑定自动更新的。

如果未绑定,可以这样设置:"settings" -> “Webhooks” -> "Add webhook" ->

  1. Payload URL填写:“https://packagist.org/api/github”

  2. Content type填写:“application/json”

  3. Secret填写:“packagist提供的token”

  4. 其他的默认即可

  5. 点击“Add webhook” 完成。

至此,后期我们更新代码后会自动同步到 packagist.org 上。

//其他开发者可以这样获取包	
composer require number-format/number-format:dev-master

为什么会有:dev-master,为什么引用其他的包不用这样设置?

因为我们引用的其他包都是稳定包,默认为:-stable。

是因为我们 composer.json 中设置了 minimum-stability 属性,这个可以了解下“版本约束”,在这就不多说了。

当我们在发布包后,如果获取不到报错怎么办,有可能是镜像的问题。

composer 设置镜像地址

//查看全局设置	
composer config -gl	
//第一种:设置国内镜像	
composer config -g repo.packagist composer https://packagist.phpcomposer.com	
//第二种:设置国内镜像	
composer config -g repo.packagist composer https://packagist.laravel-china.org	
//第三种:设置国内镜像	
composer config -g repos.packagist composer https://php.cnpkg.org

小结

通过这篇文章,解决了上述提到的三个问题:

  1. composer 是用来干嘛的?

  2. composer 是如何安装的?

  3. composer 包是如何开发的?

看完后,是不是觉得 Composer 包开发原来这么简单,作为骄傲的程序员,去开发属于自己的 Composer 包吧!

以上是Composer 套件開發有這麼簡單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
如何使用Composer簡化PHP源碼分析:theseer/tokenizer庫的應用如何使用Composer簡化PHP源碼分析:theseer/tokenizer庫的應用Apr 18, 2025 am 06:00 AM

在處理PHP源碼分析的過程中,我遇到了一個棘手的問題:如何將PHP代碼轉換為更易於分析和處理的格式。我嘗試了多種方法,但效果都不理想。最後,通過使用Composer安裝theseer/tokenizer庫,我成功地將PHP源碼轉換為XML格式,極大地簡化了後續的分析工作。

使用作曲家:簡化PHP中的軟件包管理使用作曲家:簡化PHP中的軟件包管理Apr 18, 2025 am 12:01 AM

Composer是一個PHP依賴管理工具,通過composer.json文件管理項目依賴。 1.安裝Composer:運行幾條命令並移動到全局路徑。 2.配置Composer:在項目根目錄創建composer.json文件並運行composerinstall。 3.依賴管理:通過composer.json指定庫及其版本,使用語義化版本號控制。 4.使用Autoloading:通過autoload字段定義類的自動加載規則,簡化開發。 5.包管理:支持私有庫管理,通過repositories字段定義私有庫地址

如何使用Composer簡化PHP項目中的性能監控如何使用Composer簡化PHP項目中的性能監控Apr 17, 2025 pm 11:57 PM

在開發PHP項目時,我們常常需要對代碼的執行時間進行監控,以優化性能。在我最近的一個項目中,我遇到了一個問題:需要在不同代碼段之間進行精確的計時,但手動實現計時器不僅繁瑣,而且容易出錯。經過一番探索,我發現了phpunit/php-timer這個庫,它通過Composer輕鬆集成,極大地簡化了我的工作。

解決版本管理困擾:phar-io/version庫的使用指南解決版本管理困擾:phar-io/version庫的使用指南Apr 17, 2025 pm 11:54 PM

在開發過程中,版本管理一直是個棘手的問題,尤其是在處理軟件包依賴時。最近,我在項目中遇到了一個關於版本控制的問題:需要精確地管理和比較不同軟件包的版本信息,確保項目能夠正確地依賴和升級。我嘗試了幾種方法,但效果不盡如人意。最終,我找到了phar-io/version這個庫,它完美地解決了我的問題。

使用Composer輕鬆實現PHP8.3功能的向下兼容使用Composer輕鬆實現PHP8.3功能的向下兼容Apr 17, 2025 pm 11:51 PM

在開發項目時,我常常需要使用一些新版本PHP的特性,但有時由於服務器環境的限制,不得不使用較低版本的PHP。這導致我無法使用某些新功能,比如PHP8.3中引入的json_validate和Override等。為了解決這個問題,我找到了Symfony的polyfill-php83庫,它讓我可以在低版本PHP中使用這些新功能。

如何使用Composer輕鬆統計PHP代碼行數如何使用Composer輕鬆統計PHP代碼行數Apr 17, 2025 pm 11:48 PM

在進行PHP項目開發時,統計代碼行數是一項常見的需求,尤其是在評估項目規模或進行代碼審查時。然而,手動統計不僅耗時且容易出錯。最近,我在項目中遇到了這個需求,嘗試了多種方法後,最終通過Composer安裝sebastian/lines-of-code庫,輕鬆解決了這一問題。

解決PHP超時問題:phpunit/php-invoker庫的應用解決PHP超時問題:phpunit/php-invoker庫的應用Apr 17, 2025 pm 11:45 PM

在開發PHP項目時,經常會遇到一些函數或方法執行時間過長,導致程序超時的問題。我曾嘗試了多種解決方案,但效果不盡如人意,直到我發現了phpunit/php-invoker庫。這個庫通過設置超時時間來調用可執行函數,徹底解決了我的難題。

如何使用Composer解決文件類型檢測的難題如何使用Composer解決文件類型檢測的難題Apr 17, 2025 pm 11:42 PM

在開發一個文件處理系統時,我遇到了一個棘手的問題:如何準確地檢測文件的MIME類型。最初,我嘗試使用PHP的內置函數mime_content_type()和finfo類,但發現這些方法在處理某些特殊文件時不夠穩定,導致系統誤判文件類型,影響了用戶體驗。經過一番探索,我找到了league/mime-type-detection這個庫,它為我的項目帶來了完美的解決方案。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版