转载请注明文章出处:https://tlanyan.me/php-review...PHP评测系列目录PH??P基础Web请求CookieWeb响应Session数据库操作加密解密Composer上一篇Composer之篇简单介绍了Composer的相关概念和用法,应对日常开发完全没问题。为了更好地使用Composer协同工作,学习创建自己的Composer包是一项必备技能。本文首先解释了Composer仓库的概念,然后给出了创建和发布Composer包的步骤。存储库是软件开发中的一个常见概念。类似于sources,主要是指托管资源的地方。很多软件都有仓库的概念,比如yum、npm、maven、Git,还有本文的主角Composer。仓库集中托管资源,为软件的正常工作提供保障。Packagist是Composer的默认中央存储库,PHP社区中的大多数Composer包都托管在这个网站上。Packagist提供开放且免费的托管服务。任何人都可以自由注册和发布包,无需审核。Packagist由PrivatePackagist托管和维护。两者的主要区别是:Packagist的官网是https://packagist.org>,托管...,托管的代码不需要开源,仓库服务器可以在内网,提供更快,更高效的封装代码托管服务。可以配置多个仓库,Composer会自动为项目寻找最合适的依赖包。查找包的过程如下:首先查看当前项目是否配置了附加仓库,如果有则先在附加仓库中查找;如果没有结果,则上去全局配置中的附加仓库进行检索;如果未配置或搜索无结果,它将回退到默认的PackagistCentralRepositoryRetrieval。除非禁用默认存储库,否则始终会检索Packagist中的包。出于这个原因,Composer建议PHP开发人员将他们的包托管在Packagist网站上,以便于其他人检索和参考。配置仓库Composer的仓库有两种配置方式:命令行和编辑配置文件。composerconfig是一个Composer配置命令,可以用来配置项目或全局仓库信息,例如:composerconfig[-g]repo.packagistcomposerhttps://packagist.phpcomposer.com第二种方法是编辑配置文件.编辑项目的composer.json或~/.config/composer/config.json,添加一个仓库的配置,例如:"repositories":{"packagist":{"type":"composer","url":"https://packagist.phpcomposer.com"}}以上配置使用Packagist中国全镜像网站作为默认中央仓库。在中国大陆部署PHP项目时,推荐使用该仓库目录,可以加快依赖包的下载速度。仓库配置最重要的两个参数是type和url。type表示仓库的类型,url指向具体的URL。根据仓库的位置,常用的类型选项有:composer、Composer包托管仓库、Packagist中国完整镜像等;vcs,版本控制管理系统,如Github上的项目地址;pear,PEAR上的包;包,位于Internet上的包中;神器,代码压缩包的集合;path,指向代码的具体位置。网上的仓库,type的常见取值有composer和vcs;对于本地项目,常见的值是artifact和path。具体用例请参考Composer官方文档。掌握了存储库的概念及其配置后,让我们创建自己的包。创建自己的Composer包创建Composer包只有两步:1.填写包描述信息;2.编写代码。本文创建一个hello-composer包来演示创建过程。这个包只有一个功能:输出字符串“Hello,Composer!”。Composer包的描述信息保存在composer.json文件中,可以直接创建(或从其他项目复制)composer.json文件,手动填写必要的字段信息;也可以使用composerinit命令交互输入包信息生成composer.json文件后其他字段信息的Completion。我们采取直接编辑文件的方式,在composer.json中输入如下内容:{"name":"tlanyan/hello-composer","description":"Hello,Composer!","type":"library","require":{"php":">=7.0"},"license":"MIT","authors":[{"name":"tlanyan","email":"tlanyan@hotmail.com"}],"minimum-stability":"stable","autoload":{"psr-4":{"tlanyan\\":"src/"}}}以上内容基本上是一个Composer包的必??填字段.其他字段参考Composer官网composer.json的说明。注意标记为root-only的字段,root-only表示当前包只有在主项目时才生效。比如当前项目中开发了require-dev字段,该字段中的包会被下载下来放到vendor文件夹中;如果该项目被其他项目引用,该字段的值将被忽略,引用的包将不会被下载。接下来写代码。在src目录下新建一个HelloComposer.php:namespacetlanyan;classHelloComposer{publicstaticfunctiongreet(){echo"Hello,Composer!",PHP_EOL;}}代码风格推荐参考PSR-2规范,文件命名和路径规范推荐参考PSR-4规范。另请注意,文件的路径必须与composer.json中autoload的值匹配。通过两个简单的步骤,我们创建了自己的Composer包。然后在其他项目中引用该包。引用Composer包新建测试项目,引用上面创建的包并查看效果,步骤如下:1.新建一个test文件夹,复制或新建一个composer.json文件,配置如下:{...."require":{"tlanyan/hello-composer":"*"},"minimum-stability":"dev","repositories":{"local":{"type":"path","url":"/path/to/hello-composer"}},....}配置文件需要注意两点:1.如果hello-composer的composer.json文件没有版本字段(或者不是稳定版),如果minimum-stability值为dev(默认为stable),否则无法安装;2.需要添加自定义仓库,type值为path。2.执行composerinstall-vvv安装依赖包。安装完成后,vendor目录下会生成tlanyan/hello-composer目录。3、在test中新建Test.php文件,引用HelloComposer类:namespacetest;需要“供应商/autoload.php”;使用tlanyan\HelloComposer;类测试{publicstaticmain(){HelloComposer::greet();}}测试::主要();4.执行Test.php:phpTest.php,输出“Hello,Composer!”。通过配置Composer仓库,我们成功引用了创建好的hello-composer包。测试OK后可以发布到网上供其他人使用。下面简单介绍一下发布过程。发布Composer包有几种方法可以将Composer包发布到Internet:将它们打包成zip并上传到任何可公开访问的网站;通过版本控制软件上传到代码仓库;将它们提交给PEAR社区;将它们提交到私人Composer仓库;提交给Packagist。前四种方式,用户需要配置仓库信息才能取回包(PEAR社区快死了,可以忽略)。如果代码开源,建议提交给Packagist,方便全球PHP开发者检索和使用,为Composer生态做贡献。向Packagist提交包需要经过以下流程:在Github上创建项目并提交代码;在Packagist中输入项目地址提交包;在Github上配置项目以触发Packagist自动更新。前两步是强制性的,第三步是可选的。本着对提交的包负责的态度,强烈建议完成第三步。提交包的过程涉及两个站点,Github和Packagist。Github和Packagist的关系是:Github托管实际的代码和文件;Packagist托管包的作者、包名、版本号和下载量等元数据。简而言之,Packagist是索引,Github是内容提供者。详细步骤请参考官网指南或在线教程。网上相关内容太多,本文不再赘述。总结本文介绍了Composer存储库的概念,创建了一个完整的Composer包,并给出了将包提交到Packagist的指南。掌握相关概念和运行机制后,用户可以提交代码为社区做贡献,也可以跳出Packagist免费参考和安装依赖包。参考https://getcomposer.org/doc/https://packagist.org/abouthttps://www.phpcomposer.com/
