创建你的第一个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, ...
随机推荐
- java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...
- 3.MySQL(三)
索引类型 先创建表 mysql> CREATE TABLE test( -> id INT, -> username VARCHAR(16), -> city VARCHAR( ...
- 【烂笔头】adb命令篇
1.一个自动安装SystemUI.apk的脚本文件push-SystemUI.bat: adb rootadb remountadb push ./SystemUI.apk system/priv-a ...
- 模板模式之clone()方法
clone()方法的使用,体现了模板模式的思想,常见用法可以参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201
- 从零开始学习PYTHON3讲义(三)写第一个程序
<从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其 ...
- GraphQL 的前世今生
GraphQL是什么 GraphQL是一种新的API标准,它提供了一种更高效.强大和灵活的数据提供方式.它是由Facebook开发和开源,目前由来自世界各地的大公司和个人维护.GraphQL本质上是一 ...
- vue开发项目详细教程(第一篇 搭建环境篇)
最近做vue做项目碰到了不少坑,看了三天文档便开始上手做项目了,不是我牛b,是因为项目紧,我没有时间去深入学习,所以只能一边学一边做了. 我要做的项目是一个官方网站(包括管理后台),也因为是我第一次使 ...
- python 中 *args 和 **kwargs 的区别
在 python 中,*args 和 **kwargs 都代表 1个 或 多个 参数的意思.*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型.下文举例说明 ...
- https 加密、http2.0、keep-alive
原文地址:https://ainyi.com/44 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议 ...
- ps 命令的十个简单用法
注记 ps 命令有两种不同的语法风格 -- BSD 与 UNIX 两种风格.新手常常对这两种形式产生误解,因此我们有必要在这里作一个简单的说明: ps aux 与 ps -aux 是不同的,例如 -u ...