日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习开发自己的composer包,并使用GitHub实时更新到Packagist

發(fā)布時間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习开发自己的composer包,并使用GitHub实时更新到Packagist 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

composer是什么

Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每個項(xiàng)目的基礎(chǔ)上進(jìn)行管理,在你項(xiàng)目的某個目錄中(例如 vendor)進(jìn)行安裝。默認(rèn)情況下它不會在全局安裝任何東西。因此,這僅僅是一個依賴管理。

Composer 受到了 node's npm 和 ruby's bundler 的強(qiáng)烈啟發(fā)。而當(dāng)時 PHP 下并沒有類似的工具。

composer可以做什么

Composer 將這樣為你解決問題:

  • 你有一個項(xiàng)目依賴于若干個庫。
  • 其中一些庫依賴于其他庫。
  • 你聲明你所依賴的東西。
  • Composer 會找出哪個版本的包需要安裝,并安裝它們(將它們下載到你的項(xiàng)目中)。

系統(tǒng)學(xué)習(xí)composer的使用請移步 composer中文學(xué)習(xí)

開發(fā)自己的composer組件

要點(diǎn):理解composer如何實(shí)現(xiàn)自動加載第三方組件; 理解psr-0和psr-4的規(guī)范; 理解基于psr-0,psr-4,classmap,files如何實(shí)現(xiàn)自動加載。 理解Composer和Packagist

關(guān)于安裝和使用composer請參考composer中文學(xué)習(xí)

創(chuàng)建目錄名稱

mkdir try-make-package cd try-make-package

這個try-make-package文件夾就是你的包的根目錄了,你只需要記住composer.json在包的哪個目錄下面,一般那就是包的根目錄了。
現(xiàn)在我們還沒有composer.json文件,下面我們來初始化

初始化擴(kuò)展包

? composer initWelcome to the Composer config generatorThis command will guide you through creating your composer.json config.Package name (<vendor>/<name>) [lingan/try-make-package]: Description []: try make a package Author [saboran <saboran@163.com>, n to skip]: Minimum Stability []: dev Package Type (e.g. library, project, metapackage, composer-plugin) []: library License []: MITDefine your dependencies.Would you like to define your dependencies (require) interactively [yes]? n Would you like to define your dev dependencies (require-dev) interactively [yes]? n{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {} }Do you confirm generation [yes]? yes

經(jīng)過一番上面的掙扎在當(dāng)前目錄就生成了composer.json文件,下面我們對這個文件進(jìn)行一些修改

修改composer.json增加自動加載規(guī)范(命名空間和目錄映射關(guān)系)和環(huán)境要求

{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {"php": ">=7.0"},"autoload": {"psr-4": {"Flower\\Rose\\": "src/Flower/Rose","Flower\\Lily\\": "src/Flower/Lily"}} }

創(chuàng)建類文件

根據(jù)上面的命名空間和目錄的映射關(guān)系,創(chuàng)建對應(yīng)目錄和文件,如下圖

對應(yīng)文件內(nèi)容

<?php /*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:39*/namespace Flower\Rose;class Rose {public function desc(){echo "this is rose flower";} } <?php /*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:38*/namespace Flower\Lily;class Lily {public function desc(){echo "this is lily flower";} }

測試安裝

以上代碼都梳理完畢后,需要composer install來測試我們的包是否可以正常工作此時會在vendor/composer/autoload_psr4.php中生成命名空間和目錄的映射關(guān)系,被包在一個數(shù)組中:

<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir);return array('Flower\\Rose\\' => array($baseDir . '/src/Flower/Rose'),'Flower\\Lily\\' => array($baseDir . '/src/Flower/Lily'), );

增加.gitignore為git忽略一些文件,增加readme.md為項(xiàng)目增加描述

.idea vendor/ composer.lock

提交代碼到github

現(xiàn)在自己的Github主頁上創(chuàng)建一個新的倉庫然后將項(xiàng)目提交到對應(yīng)倉庫,參考如下

git init git add -A git commit -am "init && dev package" git remote add origin git@github.com:linganmin/try-make-package.git git push -u origin master

登錄自己的packagist submit(自己注冊)

將自己的項(xiàng)目地址粘貼

點(diǎn)擊check,然后點(diǎn)擊submit,至此,自己的composer包就提交成功了,

測試使用自己開發(fā)的包擴(kuò)展[2017.11.07更新]

  • 創(chuàng)建測試目錄
mkdir test-my-package cd test-my-package
  • 安裝自己的擴(kuò)展
composer require lingan/try-make-package dev-master ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals- Installing lingan/try-make-package (dev-master d7b9f94): Cloning d7b9f941b0 from cache Writing lock file Generating autoload files
  • 安裝完成的目錄如下圖
  • 查看autoload_psr4.php
<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir);return array('Flower\\Rose\\' => array($vendorDir . '/lingan/try-make-package/src/Flower/Rose'),'Flower\\Lily\\' => array($vendorDir . '/lingan/try-make-package/src/Flower/Lily'), );
  • 新建首頁入口文件index.php,開始測試自己寫的包
<?php /*** Created by PhpStorm.* User: Lingan* Date: 2017/11/7* Time: 11:04*/ require_once './vendor/autoload.php'; // 加載自動加載文件use Flower\Rose\Rose; use Flower\Lily\Lily;$rose = new Rose(); $lily = new Lily();echo $rose->desc(); echo "\n"; echo $lily->desc();
  • 執(zhí)行
php index.php this is rose flower this is lily flower%

* 至此說明我們自己開發(fā)的擴(kuò)展包可以正常使用

設(shè)置Packagist上自動更新擴(kuò)展包,即當(dāng)我們更新擴(kuò)展包提交到GitHub時,Packagist自動更新

在沒有設(shè)置自動更新時,Packagist上包詳情頁會有這樣一個提示

This package is not auto-updated. Please set up the GitHub Service Hook for Packagist so that it gets updated whenever you push!(這個軟件包不是自動更新的。請為Packagist 設(shè)置GitHub服務(wù)鉤,以便在您推送時更新!)

詳細(xì)設(shè)置自動更新軟件包的文檔地址

簡化步驟如下:

  • 去個人中心頁面拿到自己的api令牌
  • 去當(dāng)前包在GitHub的地址,點(diǎn)擊設(shè)置,點(diǎn)擊集成和服務(wù),點(diǎn)擊添加Packagist服務(wù)并配置你的API令牌,以及你的Packagist用戶名和賬號對應(yīng)域名
  • 選擇active,點(diǎn)擊add service
  • 設(shè)置自動更新結(jié)束,之后你更改了自己包擴(kuò)展的代碼提交到GitHub后,很短的時間差就會同步到Packagist
  • 結(jié)束語

    作為一枚渣渣,發(fā)現(xiàn)自己的不足,嘗試接觸更多新技術(shù)和工具,以上文字若有錯誤歡迎指正

    Happy Coding

    總結(jié)

    以上是生活随笔為你收集整理的学习开发自己的composer包,并使用GitHub实时更新到Packagist的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。