PHP创建自己的Composer包方法

仓库(Repository)

仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所。许多软件都有仓库的概念,例如yum、npm、maven、Git,以及本文的主角Composer。仓库以中心化的方式托管资源,为软件的正常工作提供保障。

Packagist 是Composer默认的中央仓库,PHP社区的绝大部分Composer包都托管在该网站上。Packagist提供公开的、免费的托管服务,任何人均可注册、自由发布包,无需审核。Packagist由Private Packagist提供托管和维护,两者的主要区别为:Packagist的官网是https://packagist.org,托管...,托管的代码无需开源,仓库服务器可位于内网,提供更快、更高效的包代码托管服务。

可以配置多个仓库,Composer会自动找出最适合项目的依赖包。搜索包的流程如下:首先检查当前项目是否配置额外仓库,有则优先在额外仓库中检索;无结果向上到全局配置中的额外仓库检索;未配置或搜索无结果的情况下,回退到默认的Packagist中央仓库检索。除非禁用了默认的仓库,Packagist中的包总会被检索到。因为这个原因,Composer推荐PHP开发人员将包托管在Packagist网站上,方便他人检索和引用。

配置仓库

有两种方法对Composer的仓库进行配置:命令行和编辑配置文件。composer config是Composer配置的命令,可以用来配置项目或全局的仓库信息,例如:

composer config [-g] repo.packagist composer https://packagist.phpcomposer.com

第二种方法是编辑配置文件。编辑项目的composer.json或~/.config/composer/config.json,增加repositories一项配置,例如:

"repositories": {
  "packagist": {
    "type": "composer",
    "url": "https://packagist.phpcomposer.com"
  }
}

以上配置使用 Packagist中国全量镜像 网站作为默认中央仓库。在大陆地区部署PHP项目,建议使用该仓库目录,能加速依赖包的下载。

仓库配置最重要的两个参数是type和url。type指明仓库的类型,url则指向具体网址。根据仓库的位置,常用的type可选值有:

  1. composer,Composer包托管仓库,例如 Packagist中国全量镜像;
  2. vcs,版本控制管理系统,例如Github上的项目地址;
  3. pear,PEAR上的包;
  4. package,位于互联网上包;
  5. artifact,代码zip包合集;
  6. path,指向代码具体位置。

互联网上的仓库,type的常见值是composer和vcs;本地的项目,常见值是artifact和path。具体用例,可参考Composer官方文档。

掌握了仓库的概念和其配置,接下来我们创建自己的包。

创建自己的Composer包

创建一个Composer包只需两步:1. 填写包描述信息;2. 写代码。本文创建一个hello-composer的包来演示创建过程。该包功能只有一个:输出字符串“Hello, Composer!”。

Composer包的描述信息存放在composer.json文件中,可直接新建(或从其他项目拷贝)composer.json文件,手动填充必要的字段信息;也可以用composer init命令,交互式的输入包信息,生成composer.json文件后再补全其他字段信息。我们采取直接编辑文件的方式,在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:

namespace tlanyan;

class HelloComposer
{
  public static function greet()
  {
    echo "Hello, Composer!", PHP_EOL;
  }
}

代码风格建议参考PSR-2规范,文件命名和路径规范建议参考PSR-4规范。另外需注意文件的路径需与composer.json中autoload的值相匹配。

通过简单两步,我们创建的自己的Composer包。接下来在其他项目中引用该包。

引用Composer包

新建一个test项目,引用上文创建的包并查看效果,步骤如下:

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文件没有version字段(或不是稳定版),minimum-stability值要是dev(默认是stable),否则无法安装; 2. 需添加自定义仓库,type值为path。

2.执行composer install -vvv安装依赖包,安装完成后vendor目录下生成tlanyan/hello-composer目录。

3.在test中新建Test.php文件,引用HelloComposer类:

  namespace test;

  require "vendor/autoload.php";

  use tlanyan\HelloComposer;

  class Test
  {
    public static main()
    {
      HelloComposer::greet();
    }
  }

  Test::main();

.执行Test.php:php Test.php,输出"Hello, Composer!"。

通过配置Composer仓库,我们成功引用了创建的hello-composer包。测试没问题后,就可以发布到网上供其他人使用。下面简要说是发布流程。

发布Composer包

将Composer包发布到互联网的方式有几种:

  1. 打包成zip,上传到任意一个可公开访问的网站;
  2. 通过版本控制软件,上传到代码仓库;
  3. 提交到PEAR社区;
  4. 提交到私有的Composer仓库;
  5. 提交到Packagist。

前四种方式,需要用户配置仓库信息才能检索到包(PEAR社区几乎已死,可以忽略)。如果代码开源,建议提交到Packagist,方便全世界的PHP开发者检索和使用,为Composer生态做贡献。

提交包到Packagist,要经历以下过程:

  1. 在Github创建项目并提交代码;
  2. 在Packagist输入项目地址提交包;
  3. 在Github配置项目,触发Packagist自动更新。

前两步是必须的,第三步可选。本着为提交的包负责的态度,强烈建议完成第三步操作。

提交包的过程涉及到Github和Packagist两个站点,Github和Packagist之间的关系为:Github托管实际的代码和文件;Packagist托管包的作者、包名、版本号、下载量等元数据保。简要说Packagist是索引,Github是内容提供方。

详细步骤可参考官网指引或网上教程,网上相关内容太多,本文不再重复。

总结

本文介绍了Composer仓库的概念,创建了一个完整的Composer包,并给出提交包到Packagist的指引。用户掌握相关概念和运行机制后,可提交代码为社区做贡献,也可跳出Packagist自由的引用和安装依赖包。

您可能感兴趣的文章:

  • PHP 开发者该知道的 5 个 Composer 小技巧
  • 用 Composer构建自己的 PHP 框架之使用 ORM
  • 用 Composer构建自己的 PHP 框架之设计 MVC
  • 用 Composer构建自己的 PHP 框架之构建路由
  • 用 Composer构建自己的 PHP 框架之基础准备
  • PHPer 需要了解的 5 个 Composer 小技巧
  • PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
  • PHP管理依赖(dependency)关系工具 Composer 安装与使用
(0)

相关推荐

  • 用 Composer构建自己的 PHP 框架之设计 MVC

    回顾 在上一篇教程中,我们使用 codingbean/macaw 这个 Composer 包构建了两条简单路由,第一条是响应 GET '/fuck' 的,另一条会 hold 住所有请求.其实对 PHP 框架来说,有了路由就有了一切.所以接下来我们要做的事情就是让 MFFC 框架更加规范,更加丰满. 这就牵扯到了 PHP 框架另外的价值:确立开发规范以便于`多人协作`,使用 ORM`.`模板引擎 等工具以`提高开发效率`. 正式开始规划文件夹 新建 MFFC/app 文件夹,在 app 中创建 c

  • PHPer 需要了解的 5 个 Composer 小技巧

    Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<PHP管理依赖(dependency)关系工具 Composer 安装与使用>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单: composer update foo/bar 此外,这个技巧还可以用来解决"警告信息问题".你一定见过这样的警告信息: Warning: The lock file is

  • PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)

    举例来说,假设我们的项目想要使用 monolog 这个日志工具,就需要在composer.json里告诉composer我们需要它: { "require": { "monolog/monolog": "1.*" } } 之后执行: php composer.phar install 好,现在安装完了,该怎么使用呢?Composer自动生成了一个autoload文件,你只需要引用它 require '/path/to/vendor/autoloa

  • PHP 开发者该知道的 5 个 Composer 小技巧

    Composer 是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer PHP依赖管理的新时代>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单: composer update foo/bar 此外,这个技巧还可以用来解决"警告信息问题".你一定见过这样的警告信息: Warning: The lock file is not up to date wi

  • 用 Composer构建自己的 PHP 框架之使用 ORM

    回顾 经过前三篇文章 基础准备 . 构建路由 和 设计 MVC ,我们已经得到了一个结构比较完整的 MVC 架构的 PHP 微框架,但是距离一个真正能够上手使用的框架还差一样东西: 数据库封装 ,本篇就将讲述如何集成一个 ORM Composer 包 . 本篇是本系列最后一篇,接下来我可能会以 让我们开了又开的 Composer 包 为系列标题分享一些体验和感悟,将主要发表在本站上. 正文 我们选择 Laravel 的 illuminate/database 作为我们的 ORM 包.我试用了几个

  • PHP管理依赖(dependency)关系工具 Composer 安装与使用

    PHP Composer 安装 系统需求: Composer 需要PHP5.3.2+ 以上的环境来运行.有几个敏感的PHP设置和编译标志也是必需的,但安装程序会发出警告当存在任何不兼容的情况. 比如PHP的扩展的要求是,安装或重新编译php without –disable-phar 为了从源地址安装软件包,而不是简单的压缩文件包,您将需要安装软件包的版本控制工具,比如git.svn或hg等. Composer 是兼容多平台的,其运行适用于Windows,Linux和OSX. 安装失败的错误消息

  • 用 Composer构建自己的 PHP 框架之基础准备

    『Composer 一统天下的时代已经到来!』 --白岩松 "一个时代结束了,另一个时代开始了." Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年.FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和强健的体魄后,提出了PSR-0 到 PSR-4 五套 PHP 非官方规范: 1. PSR-0 (Autoloading Standard) 自动加载标准 2. PSR-1 (Basic Codin

  • 用 Composer构建自己的 PHP 框架之构建路由

    上一篇中我们已经建立了一个空的 Composer 项目,本篇将讲述如何构建路由. 久负盛名的 CodeIgniter 框架是很多人的 PHP 开发入门框架,同样也是我开始学习如何从头构建一个网站的框架.在 CI 中我学到了很多,其中对 MVC 的深入理解和对框架本质的理解对我的影响最大.从使用框架是为了提高开发效率的角度来看,框架的本质就是路由. 下面我们就开始自己来构建路由,先去 GitHub 搜一下:点此查看搜索结果 推荐https://github.com/NoahBuscher/Maca

  • PHP创建自己的Composer包方法

    仓库(Repository) 仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所.许多软件都有仓库的概念,例如yum.npm.maven.Git,以及本文的主角Composer.仓库以中心化的方式托管资源,为软件的正常工作提供保障. Packagist 是Composer默认的中央仓库,PHP社区的绝大部分Composer包都托管在该网站上.Packagist提供公开的.免费的托管服务,任何人均可注册.自由发布包,无需审核.Packagist由Private Pac

  • pycharm创建一个python包方法图解

    pycharm怎么创建一个python包?在进行使用的一个的pycharm的那么就需要的根据的情况下,那么就需要的来进行创建一个python的包的相关的文件,那么小编告诉大家pycharm怎么创建一个python包? 首先,进行打开一个pycharm的软件的界面当中,进行点击菜单中的 file 的选项菜单. 进行点击了file 的菜单之后,弹出了下拉菜单选中为 new 的选项. 这样进行点击new之后,弹出了下一级菜单选中为 python package 的选项. 这样就会弹出了new pack

  • PHP创建PowerPoint2007文档的方法

    本文实例讲述了PHP创建PowerPoint2007文档的方法.分享给大家供大家参考,具体如下: 今天早上从订阅的 Zend DevZone 看到篇很有意思的文章. 试了一下. 果然很又意思, 分享给大家吧. 程序需要 PHP 5.2 以上环境, 另外需要 php_zip 和 php_xml 扩展模块支持. 另外需要下载 PHPPowerPoint 类库. 官方网站地址: http://phppowerpoint.codeplex.com/ 目前稳定版本是 0.1.0.也可点击此处本站下载. 说

  • Java创建ZIP压缩文件的方法

    本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

  • 使用命令行工具npm新创建一个vue项目的方法

    Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程. 只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构建配置的项目: # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project $ vue init webpack test //输入命令 ? Project

  • Spring Boot创建可执行jar包的实例教程

    传统的spring项目,可能大部分都要部署到web容器中,如Tomcat.Spring Boot提供了一种超级简单的部署方式,就是直接将应用打成jar包,在生产上只需要执行java -jar就可以运行了. 本篇文章就介绍如何创建可执行jar包,以及如何部署.运行和停止. 第一步,我们需要在pom.xml添加spring-boot-maven-plugin,添加在dependecies部分下面: <build> <plugins> <plugin> <groupId

  • iOS中.a和.framework静态库的创建与.bundle资源包的使用详解

    前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自己写的没有什么区别,我们可以最大程度的修改源码来适应自己功能.闭源库就是被发布者提前打包好的静态库或 Bundle 包,对此我们无法看到内部实现,对于其封装好的特定功能,我们也只需要调用其开放的API即可. 在正式的上代码之前,先介绍一些从网上搜集的静态库相关的基本概念,以加深对后面知识的理解 1. 库 库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库.

  • Spring框架花式创建Bean的n种方法(小结)

    常用的从容器中获取bean实例使用这样的方式: @Test public void test() { Persion p = (Persion) ioc.getBean("p1"); System.out.println(p); } 常用的在容器中配置组件使用这样的方式: <bean id="p1" class="com.gql.bean.Persion"> <property name="name" val

  • 使用python创建生成动态链接库dll的方法

    如今,随着深度学习的发展,python已经成为了深度学习研究中第一语言.绝大部分的深度学习工具包都有python的版本,很多重要算法都有python版本的实现.为了将这些算法应用到具体工程中,这些工具包也提供了不同类型的接口. 动态链接库(.dll,.so)是系统开发中一种非常重要的跨语言协作方式.把python语言写成的算法编译成动态库,能够提供给其他语言调用,这能够在很大程度上提高算法的开发效率. 但是,虽然python可以调用其他语言生成的动态库,python作为一种脚本语言,本身是不能直

  • pandas创建DataFrame的7种方法小结

    笔者在学习pandas,在学习过程中总结了一下创建dataframe的方法,通过查阅资料总结遗下几种方法,如果你有其他的方法欢迎留言补充. 练习代码 请点击此处下载 学习环境: 第一种: 用Python中的字典生成 第二种: 利用指定的列内容.索引以及数据 第三种:通过读取文件,可以是json,csv,excel等等. 本文例子就用excel, 上篇博客笔者已经用csv举例了.这里要注意,如果用excel请先安装xlrd这个包 这个文件笔者放在代码同目录 第四种:用numpy中的array生成

随机推荐