创建你的第一个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, ...
随机推荐
- 安装ubuntu18.10并连接xshell6
emmmm万万没想到上一篇装的linux内核才3.10,装个ubuntu系统来继续自己的docker学习之旅. 话不多说,先下镜像,地址:http://mirrors.melbourne.co.uk/ ...
- 记录eclipse安装SpringBoot插件及搭建SpringBoot项目
刚学习了下SpringBoot 插件安装 创建项目在此记录下 在spring官网上下载相关的插件,然后导入到eclipse中,以下是下载步骤: 1.首先查看自己eclipse版本号 help--> ...
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
- qt程序启动播放动画
qt程序启动播放动画 编辑删除转载 2016-01-20 10:23:11 标签:qt启动动画 1.播放动画 QAxWidget *flash = , ); //QAxWidget使用的是Active ...
- Qt5模块简介
原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...
- 深入并发包 ConcurrentHashMap 源码解析
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容 ...
- 漫画:Linux中/etc/resolv.conf文件和puppet工具解析
今天办公室里来了一个程序员妹子飞鸟,小鱼是给她分配的导师,初次见面~ 午饭时间 Linux目录结构 resolv.conf文件 nameserver 唯一的必选关键字.表明DNS 服务器的IP 地址, ...
- Android视图篇之一:Android常见基本布局
Android中,布局都是直接或间接的继承自ViewGroup类,其中,ViewGroup的直接子类目前有: AbsoluteLayout, AdapterView<T extends Adap ...
- Mac homebrew-1.5以后安装php扩展的方法
一.以前Mac安装php及php扩展的方式 用Mac的童鞋都知道,我们以前都是用brew install php70,brew install php71 这样来安装php的,用brew instal ...
- Linux中more和less命令用法
一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...