Composer 给我们带来了诸多的好处:

  • 模块化,降低代码重用成本
  • 统一的第三方代码组织方式
  • 更科学的版本更新

  

初始化项目,生成composer.json文件

初始实例项目代码目录结构:

现在要在项目的根目录里通过composer init命令创建一个composer.json的文件,也可以手动创建:

composer init

Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [administrator/mobile-push]: keke/hello
Description []: this is example
Author [keke <liutongke@live.com>, n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT Define your dependencies. Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package: {
"name": "keke/hello",
"description": "this is example",
"license": "MIT",
"authors": [
{
"name": "keke",
"email": "liutongke@live.com"
}
],
"minimum-stability": "dev",
"require": {}
} Do you confirm generation [yes]?

重要的几个填写项:

  1. Package name(重要):包名,一般是公司名+"/"+包名 比如 baocai/yprint
  2. Minimum Stability:通常默认填写dev,因为第一次代码Push完,是在dev-master分支上,dev也就是最小稳定版本标识号
  3. Package Type:根据库类别填写,sdk,lib,都可以
  4. License:版权,默认填写 MIT
  5. 接下来填写自身库需要的依赖,默认填no,后续可以在composer.json中补充修改

根目录下就生成了composer.json文件,目录结构如下:

添加自动加载

编辑生成的composer.json文件,添加php的版本要求和自动加载(使用PSR-4),加载src目录下的所有文件,如下

{
"name": "keke/hello",
"description": "this is example",
"license": "MIT",
"authors": [
{
"name": "keke",
"email": "liutongke@live.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=7.0.0"
},
"autoload": {
"psr-4": {
"hello\\": "src/"
}
}
}

进行测试
下面我们来简单测试下我们的类是否工作正常。我们在项目根目录执行composer install:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files

 生成的目录结构:

创建测试文件

下面我们在根目录下新建一个测试文件test.php

require_once __DIR__ . '/vendor/autoload.php';
use hello\Hello;
echo Hello::world();

执行成功出现hello world说明已经测试通过成功了,接下来就是将自己的第一个composer包发布到Packagist.org上了:

发布到Packagist.org

将第一步中生成的项目文件,提交到GitHub

git add .
git commit -m 'composer init'
git push

  

提交到Packagist
首先要在Packagist上注册账号并登录
点击顶部导航条中的Summit按钮
在输入框中输入github上的仓库地址
然后点击Check按钮
Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求
检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了

验证包安装

以上步骤完成,就可以验证包是否能从库中查询到并且验证是否能够成功安装,特别注意,因为刚提交,还没有设置版本,此时版本默认是dev-master,如果直接require包名,会提示找不到对应版本,务必加上版本指定,这里是:dev-master

composer require wangyi-live/netease dev-master

  直接require包名,提示找不到对应版本错误提示(解决办法设置版本号):

设置版本

版本默认是dev-master,Composer包的版本号会从Git的tag中同步过来,因此先设置项目代码的tag,回到项目目录

git tag 1.0.0
git push --tag

  

开发一个属于自己的第一个Composer/Packagist包的更多相关文章

  1. 创建你的第一个Composer/Packagist包

    今天我们要介绍一下如何通过Composer和Packagist向PHP社区贡献代码包.首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章http://docs.p ...

  2. 如何創建一個自己的 Composer/Packagist 包 (PHP)

    如何創建一個自己的 Composer/Packagist 包 首先讓我們踏着歡快的腳步去Github創建一個新庫,這裏取名 composer-car,又歡快的將它克隆到本地: git clone ht ...

  3. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  4. 如何创建一个自己的【Composer/Packagist】包

    首先让我们踏着欢快的脚步去Github创建一个新库,这里取名 composer-car,又欢快的将它克隆到本地: $ git clone git@github.com:victorruan/compo ...

  5. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  6. Windows Phone开发(21):做一个简单的绘图板

    原文:Windows Phone开发(21):做一个简单的绘图板 其实我们今天要说的就是一个控件--InkPresenter,这个控件并不是十分强大,没办法和WPF中的InkCanvas相比,估计在实 ...

  7. Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)

    JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式                      (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...

  8. 用vue开发一个app(4,一个久等了的文章)H5直播平台登录注册(1)

    我上一篇关于vue的文章和这一篇时间隔了有点久了.最近终于写完了. 因为我一直想写个有点实绩的东西,而不是随便写一个教程一样东西.结合最近在项目中学到的经验和我的一点创意. 首先介绍下这是个什么! H ...

  9. Android TV开发总结(六)构建一个TV app的直播节目实例

    请尊重分享成果,转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52966319 近年来,Android TV的迅速发展,传统的有线电视受 ...

随机推荐

  1. 九、python沉淀之路--递归、全局变量、局部变量、作用域

    一.递归 1.递归函数,同时使用嵌套,并且是将别的函数作用于调用函数里面 例1 num = [1,2,3,4,5] def add_one(i): return i+1 def reduce(i): ...

  2. git-远程协作

    远程协作相关命令 1.1. git clone 克隆远程仓库 git clone支持的协议有: 例如: git clone https://github.com/332473775/gitTestPr ...

  3. 解决IDEA输入法不跟随

    1.关掉idea后在idea的安装路径下把jre64文件夹删掉,或者重命名也行,如把jre64改成jre642: 2.升级jdk版本至jdk 8u45以上 3.把Java安装路径下的jre文件拷贝到I ...

  4. 运行jar应用程序引用其他jar包的三种常用方法(jar命令)

    参考:http://blog.csdn.net/wangmuming/article/details/44343017 方法一.使用Extension Classloader来加载 你可以把需要加载的 ...

  5. 2 ignite关键特性

    数据注入和流计算: Ignite流式计算允许以可扩展和容错的方式处理连续不中断的数据流.在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模. Ignite可以与主要的 ...

  6. docker 端口映射iptables: No chain/target/match by that name错误解决方法

    pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 service docker restart

  7. BA 新web化 问题汇总

    1. 3D堆栈图在winform端无法显示,但在web端可以正常显示,说明与浏览器版本有关,在 IE 中设置文档模式为 IE8 即报错,IE9 却正常显示,可在 <head>节点下添加如下 ...

  8. leetcode589

    树的先序遍历,使用递归实现. class Solution { public: vector<Node> Tree; void preTree(Node node) { Tree.push ...

  9. python之Dict和set类型

    Dict就是一种key:value的表格: >>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> p ...

  10. 【总结整理】WebGIS学习-thinkGIS(三):关于影像金字塔、瓦片行列号、分辨率resolution

    http://www.thinkgis.cn/topic/541a5206da8db186fd0673ba 1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而 ...