对于开发的小伙伴们来讲,代码包已是开发过程当中的屡见不鲜了。好比,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>)值。