文档章节

创建你的第一个Composer/Packagist包

little2
 little2
发布于 2018/08/20 23:48
字数 1381
阅读 2
收藏 0

 

创建你的第一个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

  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://www.chenjie.info/1880

little2
粉丝 0
博文 7
码字总数 635
作品 0
私信 提问
PHP回顾之创建自己的Composer包

前文 PHP回顾之Composer 简要介绍了Composer的相关概念和简要用法,应付日常开发已无大碍。想要更好的利用Composer协同工作,学会创建自己的Composer包是一项必不可少的技能。本文先讲解Com...

PHP开发栈
05/29
0
0
动手开发自己的第一个 composer 包

动手开发自己的第一个 composer 包 composer 是 PHP 的依赖管理工具,本篇文章就来说明如何构建一个包,并提交到 Packagist ,这样别人就可以方便地通过 composer 使用你的包了。 开发 comp...

蜗牛奔跑
2016/11/24
5
0
composer install 为什么这么慢?

composer install 为什么这么慢? 下面是一个composer install(在没有composer cache的情况下)做的所有事情: composer 在install的时候会做这几个事情: 去packagist.org中寻找对应需要的包...

蜗牛奔跑
2016/11/15
10
0
如何开发、本地测试、发布 Laravel 扩展包?

现在已经有了很多,关于如何开发 Laravel 扩展包的文章。但是大多文章写的太过片面,不够完整,而且我在实际进行开发扩展包的时候,还是遇到了很多的问题,我把自己的开发经验,以及遇到的问...

angkee
2018/01/10
0
0
作为PHP开发者请务必了解Composer

作为PHP开发者请务必了解Composer 2016-12-17 PHP开发者 (点击上方公众号,可快速关注) 作者:虞大胆 链接:www.jianshu.com/p/98c5b254a79e Composer是一个非常流行的PHP包依赖管理工具,...

High_Mountain
2017/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

硬件配置

https://akkadia.org/drepper/futex.pdf sudo lshw -businfo[sudo] lambda 的密码: Bus info Device Class Description======================================......

MtrS
58分钟前
2
0
springmvc的return “success”源码解读

qqqq

architect刘源源
今天
4
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
2
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部