對於開發的小夥伴們來講,代碼包已是開發過程當中的屢見不鮮了。好比,PHP有composer,Java有maven,前端有npm,yarn,Mac程序安裝有brew,Linux程序安裝有yum。使用這些包,能夠便於咱們很好的管理代碼引入的外部代碼組件,有助於咱們提升開發效率,同時也有助於咱們代碼管理更加優雅。下文主要就是分享我的自定義一個composer代碼包,代碼僅僅是做爲演示示例,沒有實際效果。同時也會不斷更新,你們能夠關注關注。原文地址php
建立代碼倉庫,我是選擇的GitHub做爲遠程倉庫。建立好後,咱們直接拉取到本地。後面的全部代碼都是在該倉庫下進行的。具體建立倉庫和拉取代碼就不作演示。html
咱們在倉庫(爲了方便描述,後文便用項目一詞來替代該詞)下面,建立一個src的目錄,用於存儲咱們實際的代碼。
前端
下面這個文件,是後面實際須要調用的類。具體的演示代碼,能夠經過演示代碼倉庫進行查看。主要的做用就是利用工廠模式,Cache去調用實際的緩存類。git
<?php // composer演示代碼 declare(strict_types=1); // 這裏的命名空間根據本身狀況填寫,後面生成的composer.json文件須要使用該命名空間。 namespace Bruce; use Bruce\Client\Redis; class Cache { public $redisHandle = ''; public function __construct() { $this->redisHandle = new Redis(); } }
建立好代碼倉庫中的全部文件,這時候咱們就能夠開始生成composer.json文件了。
github
下面就是具體生成的過程了,記住必定要在項目的根目錄下面使用composer init命令。redis
composer init Welcome to the Composer config generator This command will guide you through creating your composer.json config. #項目命名空間 Package name (<vendor>/<name>) [bruce_redis/redis]: bruce_redis/redis #項目描述 Description []: composer test #做者信息 Author [卡二條 <2665274677@qq.com>, n to skip]: 卡二條 <2665274677@qq.com> #輸入最低穩定版本 Minimum Stability []: dev #項目類型 Package Type (e.g. library, project, metapackage, composer-plugin) []: library #受權類型 License []: Define your dependencies. #依賴信息 Would you like to define your dependencies (require) interactively [yes]? yes #若是須要依賴,則輸入要安裝的依賴 Search for a package: php Enter the version constraint to require (or leave blank to use the latest version): >=7.0 Search for a package: Would you like to define your dev dependencies (require-dev) interactively [yes]? yes Search for a package: php Enter the version constraint to require (or leave blank to use the latest version): >=7.0 Search for a package: { "name": "bruce_redis/redis", "description": "composer test", "type": "library", "require": { "php": ">=7.0" }, "require-dev": { "php": ">=7.0" } #確認構建項目,生成composer.json Do you confirm generation [yes]? yes Would you like the vendor directory added to your .gitignore [yes]? yes Would you like to install dependencies now [yes]? yes Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files
這裏須要注意一下<vendor>/<name>配置項
根據composer中文網翻譯的是供應商名稱和項目名稱。實際指的就是,你在其餘項目中安裝該composer包時,在你其餘項目的vendor目錄下面名稱。例如,我將示例的代碼的該配置項,設置爲bruce_redis/redis。我再其餘項目使用該包,展示的形式就是下圖的效果。
shell
在生成composer.json文件以後,咱們的代碼被安裝到其餘項目,還不能直接使用,由於不能爲composer自動加載,咱們還須要作以下配置,在composer.json文件中添加以下代碼。npm
"autoload": { "psr-4": { "Bruce\\": "src/" } }
該配置項主要的目是爲了,告知composer命名空間爲Bruce的類,源碼目錄都在src下面,autoload_psr4.php文件再作文件加載時,就是根據這個目錄去下載。這裏的Bruce就是編寫實際代碼中提到的命令空間。若是你不是這個名字,改成本身的便可。例如,你寫的是AlibabComposer,自動加載中的配置就是下面的配置:json
"autoload": { "psr-4": { "Alibab\Composer\\": "src/" } }
作好上面的配置以後,咱們就能夠將代碼發佈到packagist。首先咱們須要將代碼更新到GitHub倉庫。登陸packagist,而後點擊右上角的submit按鈕,在輸入框中輸入GitHub倉庫地址便可。
緩存
發佈好代碼以後,就能夠直接在項目中引入該包。
若是你是使用的composer阿里源,或許不能當即使用,由於阿里的源還沒徹底同步過來。可切換爲官方源。
composer require bruce_redis/redis dev-master
使用該命令以後,出現下圖的結果,則證實安裝成功了。你就能夠按照GitHub倉庫裏面的示例代碼進行操做了。
在上面提到composer會自動加載,經過下圖,咱們能夠發現composer根據配置自動去加載了文件。
這裏的/bruce_redis/redis/src值就是,composer.json裏面的name(<vendor>/<name>)值。