今天我们要介绍一下如何通过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

  1. 首先要在Packagist上注册账号并登录
  2. 点击顶部导航条中的Summit按钮
  3. 在输入框中输入github上的仓库地址,如:https://github.com/chenjiesuper/ansible-php
  4. 然后点击Check按钮
    Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求
  5. 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
  6. 以后更新代码可以先从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

  1. 首先要在Packagist上注册账号并登录
  2. 点击顶部导航条中的Summit按钮
  3. 在输入框中输入github上的仓库地址,如:https://github.com/chenjiesuper/ansible-php
  4. 然后点击Check按钮
    Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求
  5. 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
  6. 以后更新代码可以先从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包的更多相关文章

  1. 开发一个属于自己的第一个Composer/Packagist包

    Composer 给我们带来了诸多的好处: 模块化,降低代码重用成本 统一的第三方代码组织方式 更科学的版本更新 初始化项目,生成composer.json文件 初始实例项目代码目录结构: 现在要在项 ...

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

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

  3. laravel框架应用和composer扩展包开发

    laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,laravel框架思想前卫,跟随时代潮 ...

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

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

  5. 创建你的一个composer包

    如何创建自己的一个composer包,这个其实很好解决的!只要你了解composer相关的知识便不难做到. 首先,你还不知道什么是composer的话,请先学习下composer的相关知识.简单的说, ...

  6. 从零创建发布属于自己的composer包

    原文地址:https://www.wjcms.net/archives/从零创建发布属于自己的composer包 今天给大家讲解一下如何从零创建发布属于自己的composer包. composer包用 ...

  7. 动手开发自己的第一个 composer 包

    原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说 ...

  8. SSIS从理论到实战,再到应用(1)----创建自己的第一个包

    原文:SSIS从理论到实战,再到应用(1)----创建自己的第一个包 其实,如果你使用sql2008的导出导入工具的时候,你就已经在使用包了. 目标:使用sql2008 导入导出工具,导入excel数 ...

  9. 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包

    docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...

随机推荐

  1. JavaScript03-基本概念一

    js包括:语法.语句.类型.关键字.保留字.操作符和对象. 语法.关键字.保留字 1.js中一切区分大小写,包括变量.函数名.操作符: 2.标识符规则,第一个字符必须是字母.下划线_.或者美元符号,其 ...

  2. Python内置函数(65)——type

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

  3. C++ 动态生成对象

    1.啰嗦一下 说起C++,很多人都觉着难学,其实我也是这么觉着的,在这个移动端火到爆的时代,我都想改行了,移动端做东西那都是现有的第三方库,拿来就可以用,而且稳定性好,开发速度快,而且最关键的是出东西 ...

  4. 『没有上司的舞会 树形DP』

    树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...

  5. Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线

    渲染流水线 1)应用阶段(CPU处理) 首先,准备好场景数据(摄像机位置,视锥体,模型和光源等) 接着,做粗粒度剔除工作. 最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等) 这一阶段 ...

  6. Android创建或删除了文件,在电脑端查看的时候,却没有对应的变化,处理办法

    在Android应用中,碰到一个问题,在代码中执行创建或者删除某个文件后,在系统的文件管理器中能够相应地看到文件的变化,但是插在电脑上查看的时候,却看不到改文件的变化.同时,当创建文件后,在系统中的某 ...

  7. ArrayList循环遍历并删除元素的常见陷阱

    在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug.不妨把这个问题当做一道面试题目,我想一定能难道不少的人.今天就给大家说一下在ArrayList循环 ...

  8. ELK-Logstash采集日志和输送日志流程测试

    讲解Logstash采集日志和输送日志流程测试,包括input,filter和output元素的测试 配置一:从elasticsearch日志文件读取日志信息,输送到控制台 $ cd /home/es ...

  9. 【java多线程】多线程的创建三种方式--笔记

    申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. ...

  10. Linux基础知识第四讲,文件内容命令

    目录 一丶常用命令 1.cat命令演示以及常用选项 2.grep 搜索命令的使用 3.echo 以及 重定向的使用 4.管道概念 一丶常用命令 序号 命令 对应英文 作用 01 cat 文件名 con ...