创建你的第一个Composer/Packagist包
今天我们要介绍一下如何通过Composer和Packagist向PHP社区贡献代码包。首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章http://docs.phpcomposer.com/00-intro.html,因为访问海外镜像源的速度较慢,也许你还需要这些方法https://pkg.phpcomposer.com/ 来获取更多基础信息。
使用Composer
Composer是PHP的一个包依赖管理工具。你可以使用第三方库也可以自行开发。现在我要告诉你如何创建一个Composer包并且发送到Packagist(其他开发者可以通过它在他们项目中使用这些发布到Packagist上的包)。
创建包
你可以创建一个新项目来使用Composer。我们建一个输出hello world 的类 。这是一个简单的类但是你也可以创建复杂的项目来分享给其他开发者。Composer通常以“vendor/package” (厂商/包名)的方式来命名。这里我们为项目命名”chenjie/hello”。
文件结构
你可以把所有的文件都放在根目录下,但是我特别推荐新建另一个文件夹 “src” 以更容易理解和维护你的代码结构。项目结构如下:
|
1
2
3
4
5
|
hello $ tree
.
└── src
└── SayHello.php
1 directories, 1 file
|
编辑hello (项目根目录) /src/SayHello.php 文件:
|
1
2
3
4
5
6
7
8
9
10
11
|
<?php
namespace Hello;
class SayHello
{
public static function world()
{
return 'Hello World!';
}
}
|
开始Composer
现在要在项目的根目录里创建一个composer.json的文件,我们可以手动创建,也可以在根目录里通过composer init命令来根据提示创建:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
hello $ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [cl/hello]: chenjie/hello
Description []: an example of composer package.
Author [chenjie <chenjie@chenjie.info>, 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": "chenjie/hello",
"description": "echo hello world"",
"license": "MIT",
"authors": [
{
"name": "chenjie",
"email": "chenjie@chenjie.info"
}
],
"minimum-stability": "dev",
"require": {}
}
Do you confirm generation [yes]?
|
根目录下就生成了composer.json文件,目录结构如下:
|
1
2
3
4
5
6
|
hello $ tree
.
├── composer.json
└── src
└── SayHello.php
1 directories, 2 files
|
添加自动加载
然后我们可以手动编辑生成的composer.json文件,添加php的版本要求和自动加载(使用PSR-4),使用Hello命名空间,加载src目录下的所有文件,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"name": "chenjie/hello",
"description": "echo hello world",
"license": "MIT License",
"authors": [
{
"name": "chenjie",
"email": "chenjie@chenjie.info"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"Hello\\": "src/"
}
}
}
|
进行测试
下面我们来简单测试下我们的类是否工作正常。我们在项目根目录执行:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
hello $ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
hello $ tree -L 2
.
├── composer.json
├── composer.lock
├── src
│ └── SayHello.php
└── vendor
├── autoload.php
└── composer
3 directories, 12 files
|
创建测试文件
下面我们在根目录下新建一个测试文件test.php
|
1
2
3
4
|
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Hello\SayHello;
echo SayHello::world();
|
在项目根目录下执行命令 php test.php
如果终端打印出“Hello World!”那祝贺你测试通过!
发布到Packagist.org
上面我们在本地完成了编写和测试。那么想让更多人使用我们的包就需要把我们新建的包发送到Packagist.org。首先我们可以先将项目发布到Github。我们先去Github 创建一个公有仓库命名“hello”, 我们在项目根目录使用Git命令来完成发布。
我们先在根目录里创建.gitignore文件,把vendor目录和composer.lock文件排除git在外。
|
1
2
3
|
hello (master) $ cat .gitignore
vendor/*
composer.lock
|
推送代码
|
1
2
3
4
5
|
git init
git add .
git commit -m "First commit"
git remote add origin git@github.com:username/hello.git
git push origin master
|
当然我们也可以带上tag标签推送
|
1
2
|
git tag 1.0 -a
git push --tags
|
提交到Packagist
- 首先要在Packagist上注册账号并登录
- 点击顶部导航条中的Summit按钮
- 在输入框中输入github上的仓库地址,如:https://github.com/chenjiesuper/ansible-php
- 然后点击Check按钮
Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求 - 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
- 以后更新代码可以先从Packagist获取token然后去github 配置下对应的GitHub Service Hook实现代码提交后Packagist自动拉取更新
使用
我们就可以在其他项目引用chenjie这个包了,方法如下:
在新建的项目根目录执行命令 composer require chenjie/hello
或者在新建项目根目录新建composer.json编辑:
|
1
2
3
4
5
|
{
"require": {
"chenjie/hello":"dev-master" //这里的版本根据实际需要修改
}
}
|
然后执行 composer install 即可。
到这里我们的第一个Composer/Packagist包就完成了,但是你可以透过它做更多。谢谢!
参考
http://blog.jgrossi.com/2013/creating-your-first-composer-packagist-package/
http://qianlei.cc/create-your-first-composer-package/
今天我们要介绍一下如何通过Composer和Packagist向PHP社区贡献代码包。首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章http://docs.phpcomposer.com/00-intro.html,因为访问海外镜像源的速度较慢,也许你还需要这些方法https://pkg.phpcomposer.com/ 来获取更多基础信息。
使用Composer
Composer是PHP的一个包依赖管理工具。你可以使用第三方库也可以自行开发。现在我要告诉你如何创建一个Composer包并且发送到Packagist(其他开发者可以通过它在他们项目中使用这些发布到Packagist上的包)。
创建包
你可以创建一个新项目来使用Composer。我们建一个输出hello world 的类 。这是一个简单的类但是你也可以创建复杂的项目来分享给其他开发者。Composer通常以“vendor/package” (厂商/包名)的方式来命名。这里我们为项目命名”chenjie/hello”。
文件结构
你可以把所有的文件都放在根目录下,但是我特别推荐新建另一个文件夹 “src” 以更容易理解和维护你的代码结构。项目结构如下:
|
1
2
3
4
5
|
hello$tree
.
└──src
└──SayHello.php
1directories,1file
|
编辑hello (项目根目录) /src/SayHello.php 文件:
|
1
2
3
4
5
6
7
8
9
10
11
|
<?php
namespaceHello;
classSayHello
{
publicstaticfunctionworld()
{
return'Hello World!';
}
}
|
开始Composer
现在要在项目的根目录里创建一个composer.json的文件,我们可以手动创建,也可以在根目录里通过composer init命令来根据提示创建:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
hello$composer init
Welcome tothe Composer config generator
Thiscommand will guide you through creating your composer.json config.
Packagename(<vendor>/<name>)[cl/hello]:chenjie/hello
Description[]:an example of composer package.
Author[chenjie<chenjie@chenjie.info>,ntoskip]:
Minimum Stability[]:dev
PackageType(e.g.library,project,metapackage,composer-plugin)[]:
License[]:MIT
Define your dependencies.
Would you like todefine your dependencies(require)interactively[yes]?
Search forapackage:
Would you like todefine your dev dependencies(require-dev)interactively[yes]?
Search forapackage:
{
"name":"chenjie/hello",
"description":"echo hello world"",
"license": "MIT",
"authors": [
{
"name": "chenjie",
"email": "chenjie@chenjie.info"
}
],
"minimum-stability": "dev",
"require":{}
}
Doyou confirm generation[yes]?
|
根目录下就生成了composer.json文件,目录结构如下:
|
1
2
3
4
5
6
|
hello$tree
.
├──composer.json
└──src
└──SayHello.php
1directories,2files
|
添加自动加载
然后我们可以手动编辑生成的composer.json文件,添加php的版本要求和自动加载(使用PSR-4),使用Hello命名空间,加载src目录下的所有文件,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"name":"chenjie/hello",
"description":"echo hello world",
"license":"MIT License",
"authors":[
{
"name":"chenjie",
"email":"chenjie@chenjie.info"
}
],
"minimum-stability":"dev",
"require":{},
"autoload":{
"psr-4":{
"Hello\\":"src/"
}
}
}
|
进行测试
下面我们来简单测试下我们的类是否工作正常。我们在项目根目录执行:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
hello$composer install
Loading composer repositories with packageinformation
Updating dependencies(including require-dev)
Nothing toinstall orupdate
Writing lock file
Generating autoload files
hello$tree-L2
.
├──composer.json
├──composer.lock
├──src
│ └──SayHello.php
└──vendor
├──autoload.php
└──composer
3directories,12files
|
创建测试文件
下面我们在根目录下新建一个测试文件test.php
|
1
2
3
4
|
<?php
require_once __DIR__.'/vendor/autoload.php';
useHello\SayHello;
echo SayHello::world();
|
在项目根目录下执行命令 php test.php
如果终端打印出“Hello World!”那祝贺你测试通过!
发布到Packagist.org
上面我们在本地完成了编写和测试。那么想让更多人使用我们的包就需要把我们新建的包发送到Packagist.org。首先我们可以先将项目发布到Github。我们先去Github 创建一个公有仓库命名“hello”, 我们在项目根目录使用Git命令来完成发布。
我们先在根目录里创建.gitignore文件,把vendor目录和composer.lock文件排除git在外。
|
1
2
3
|
hello(master)$cat.gitignore
vendor/*
composer.lock
|
推送代码
|
1
2
3
4
5
|
git init
git add.
git commit-m"First commit"
git remote add origin git@github.com:username/hello.git
git push origin master
|
当然我们也可以带上tag标签推送
|
1
2
|
git tag1.0-a
git push--tags
|
提交到Packagist
- 首先要在Packagist上注册账号并登录
- 点击顶部导航条中的Summit按钮
- 在输入框中输入github上的仓库地址,如:https://github.com/chenjiesuper/ansible-php
- 然后点击Check按钮
Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求 - 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
- 以后更新代码可以先从Packagist获取token然后去github 配置下对应的GitHub Service Hook实现代码提交后Packagist自动拉取更新
使用
我们就可以在其他项目引用chenjie这个包了,方法如下:
在新建的项目根目录执行命令 composer require chenjie/hello
或者在新建项目根目录新建composer.json编辑:
|
1
2
3
4
5
|
{
"require":{
"chenjie/hello":"dev-master"//这里的版本根据实际需要修改
}
}
|
然后执行 composer install 即可。
到这里我们的第一个Composer/Packagist包就完成了,但是你可以透过它做更多。谢谢!
参考
http://blog.jgrossi.com/2013/creating-your-first-composer-packagist-package/
http://qianlei.cc/create-your-first-composer-package/
创建你的第一个Composer/Packagist包的更多相关文章
- 开发一个属于自己的第一个Composer/Packagist包
Composer 给我们带来了诸多的好处: 模块化,降低代码重用成本 统一的第三方代码组织方式 更科学的版本更新 初始化项目,生成composer.json文件 初始实例项目代码目录结构: 现在要在项 ...
- 如何創建一個自己的 Composer/Packagist 包 (PHP)
如何創建一個自己的 Composer/Packagist 包 首先讓我們踏着歡快的腳步去Github創建一個新庫,這裏取名 composer-car,又歡快的將它克隆到本地: git clone ht ...
- laravel框架应用和composer扩展包开发
laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,laravel框架思想前卫,跟随时代潮 ...
- 如何创建一个自己的【Composer/Packagist】包
首先让我们踏着欢快的脚步去Github创建一个新库,这里取名 composer-car,又欢快的将它克隆到本地: $ git clone git@github.com:victorruan/compo ...
- 创建你的一个composer包
如何创建自己的一个composer包,这个其实很好解决的!只要你了解composer相关的知识便不难做到. 首先,你还不知道什么是composer的话,请先学习下composer的相关知识.简单的说, ...
- 从零创建发布属于自己的composer包
原文地址:https://www.wjcms.net/archives/从零创建发布属于自己的composer包 今天给大家讲解一下如何从零创建发布属于自己的composer包. composer包用 ...
- 动手开发自己的第一个 composer 包
原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说 ...
- SSIS从理论到实战,再到应用(1)----创建自己的第一个包
原文:SSIS从理论到实战,再到应用(1)----创建自己的第一个包 其实,如果你使用sql2008的导出导入工具的时候,你就已经在使用包了. 目标:使用sql2008 导入导出工具,导入excel数 ...
- 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...
随机推荐
- ASP.NET 一个数据访问层的封装
刚通过开通写博客的申请,向博客园的大佬致敬,由于一直以来都在网上搜索大家的思想,也有翻遍整个百度都有的找不到的时候,作为一个网民理应为互联网贡献一点东西. 下面是我工作后受一个师傅的影响对数据库访问层 ...
- 7.Git分支-分支简介、分支创建、分支切换
1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...
- java多线程(5)---ThreadPoolExecutor
ThreadPoolExecutor 官方API解释线程池的好处: (1)通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销. (2)对线程进行一些维护和管理,比如定时开始,周期执行,并发数控 ...
- jenkins修改数据存放路径
如果是用tomcat做容器的话,则在./bin/catalina.sh文件添加以下语句即可:export JENKINS_HOME="存放路径(需存在)" 例如:
- System.Data.Entity.Infrastructure.DbUpdateException
异常描述: 捕捉到 System.Data.Entity.Infrastructure.DbUpdateException HResult=-2146233087 Message=无法更新 E ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...
- 深入研究.NET Core的本地化机制
ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化. ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实 ...
- asp.net core 系列 10 配置configuration (上)
一. ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration 将从各种配置源提供程序操作键 ...
- SpringBoot修改Redis序列化方式
前言 由于Springboot默认提供了序列化方式并不是非常理想,对于高要求的情况下,序列化的速度和序列化之后大小有要求的情况下,不能满足,所以可能需要更换序列化的方式. 这里主要记录更换序列化的方式 ...
- 基于IdentityServer4 实现.NET Core的认证授权
IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...