如何在本地开发Compoer包

周煦辰

2019-05-26

记录一下如何在本地开发一个Composer包,以及如何发布到Packgist

假设你要开发一个名叫xuchen/biubiubiu的包。

准备工作

你得保证你的系统用已经安装了

  1. Git
  2. PHP与Composer

并且保证在命令行中都可以使用

准备一个空项目用于测试

我们首先需要在本地新建一个空的Composer项目,用来生成autoload.php文件,以及在其vendor目录中引入我们之后开发完成的包来进行测试。当然,如果你已经有一个正在开发中的项目,例如一个基于Laravel框架的项目,那么你可以跳过目前这一步。

具体可以先看一下Composer的文档,如何初始化一个项目

假设我们需要在D盘新建我们的空项目,名称为composer-workspace,则新建如下目录

d:/composer-workspace

在刚刚新建的目录中打开命令行,使用如下命令初始化空项目

composer init

composer会引导你输入各种参数来完成包的创建,名字填写<your-name>/composer-workspace即可,其他参数全部默认。我们就假设这个项目叫xuchen/composer-workspace吧。

完成以上的步骤后,我们就能在composer-wokspace目录下看到一个composer.json文件。

去Github上开个新坑

又到了每个程序员喜闻乐见的环节:去Github上开个新坑。当然了,这次我们希望能把这个Repo完善。

我们得假设你的包还未作为一个Composer包开发。至于为什么要这么假设,大部分的包,都是业务代码写着写着发现可以抽象出一个通用的包来使用,于是想着迁移到一个单独Composer包中。当然了,前提是:

  1. 原本的代码就是你的个人项目,没有使用你的上班时间及公司设备来开发。
  2. 或者,公司支持你的开源行为。

既然是新的包,我们自然要去Github上开个新坑,,Github上开新坑的步骤我就不赘述了。在Github上开一个Repo的目的并不仅仅是为了代码管理,最后我们想要将代码发布到Packgist也需要用到Github。

假设我们新开的GithubRepo叫Biubiubiu好了。

Clone你的Repo并放到随便什么位置

在Github上开好新坑了,就需要把代码Clone下来,我们就放在如下位置吧:

d:/workspace/biubiubiu

使用Composer初始化你的项目

到上一步的代码目录中,运行:

composer init

name填写xuchen/biubiubiudescription随便,stabilitydevrequire暂时可以不填,等到composer.json文件生成之后再说。

一路火花带闪电,项目的composer.json生成了,一个初始化状态的composer.json非常简陋,但是问题不大:

{
"name": "xuchen/biubiubiu",
"minimum-stability": "dev"
}

规定代码的命名空间

接下来就要把代码放进来了,关于这块,你可以先看看Composer自动加载文档

要用到autoload,我们就需要规定好我们包代码的命名空间,假设biubiubiu这个包的命名空间是Xuchen\Biubiubiu\<ClassName>,且代码放在<包的根目录>/src目录下,则需要对composer.json做如下修改:

{
"name": "xuchen/tencent-cos",
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"Xuchen\\Biubiubiu\\": "src/"
}
}
}

autoload字段中规定了我们需要自动载入的代码,从上述代码中可以看到:规定了命名空间为Xuchen\Biubiubiu,该命名空间对应的代码目录在<包的根目录>/src下。

到composer-workspace中引入包

现在我们要回过头在最开始创建的项目中引入xuchen/biubiubiu

修改d:/composer-worksapce/composer.json,加入repositories字段:

{
"name": "xuchen/composer-workspace",
"repositories": {
"xuchen/biubiubiu": {
"type": "path",
"url": "d:/workspace/biubiubiu",
"options": {
"symlink": true
}
},
}
}

在当前目录(d:/composer-worksapce)下,运行:

composer require xuchen/biubiubiu @dev

完成之后,你会发现在当前目录的vendor中出现了xuchen/biubiubiusymlink。此时,正在开发中的xuchen/biubiubiu包已经正确引入到了composer-workspace这个项目中。

写一个测试类

到刚刚规定的<包的根目录>/src下新建一个测试类,就命名为Demo.php好了:

<?php

namespace Xuchen\Biubiubiu;

/**
* Class Demo
* @package Xuchen\Biubiubiu
*/
class Demo
{
public static function execute()
{
echo 'It works!';
}
}

测试包是否已正确引入

composer-workspace项目根目录下新建一个php脚本,命名为test-autoload.php

<?php

use Xuchen\Biubiubiu\Demo;

require_once './vendor/autoload.php';

Demo::execute();

在当前目录打开命令行,使用如下命令

php -f test-autoload.php

会看到命令行上输出:

It works!

这表明xuchen/biubiubiu包中的Demo.php已经通过Composer的自动载入功能正确载入到了composer-workspace项目中。

项目依赖

假如xuchen/biubiubiu项目依赖其他的包,例如常用的Guzzle

biubiubiucomposer.json中加入如下依赖:

{
"name": "xuchen/tencent-cos",
"minimum-stability": "dev",
"require": {
"guzzlehttp/guzzle": "^6.3"
},
"autoload": {
"psr-4": {
"Xuchen\\Biubiubiu\\": "src/"
}
}
}

composer-workspace项目中使用命令行:

composer update

Composer会在composer-workspace中安装Guzzle,如此便可在xuchen/biubiubiu中直接引入Guzzle使用。

参考

Developing composer packages locally

如何在本地开发Composer包的更多相关文章

  1. 开发composer包,打通github和packagist,并自动更新

    1. 首先需要本地安装好composer,并配置好环境变量,在命令行输入composer,显示以下信息就表示正常安装 2. 在github对应项目的根目录下进行初始化composer 初始化完成后,就 ...

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

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

  3. laravel5.5开发composer扩展包

    目录 1. 下载laravel框架,并命名(framework) 2. 创建相关目录 3. 项目根目录下的composer.json文件中声明命名空间 4. 在包的根目录(packages/arche ...

  4. 开发自己的composer包

    1. 创建一个开发目录 mkdir project cd project 2. 利用composer生成一个composer.json composer init > Welcome to th ...

  5. 如何创建自己的composer包

    composer中文网 :https://www.phpcomposer.com/ 一.前期准备: composer 安装 Windows安装: 1.下载安装包,https://getcomposer ...

  6. 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)

    laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...

  7. 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境

    1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...

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

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

  9. Node.js配合node-http-proxy解决本地开发ajax跨域问题

    情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...

随机推荐

  1. Redis安装部署以及简单应用

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(list ...

  2. mysql数据库多表查询where与内连接inner join的区别

    按理说where是对前面的笛卡尔积进行过滤,工作量大增,inner join则不会.但我实际测试了一下,两种查询耗时基本相等,甚至where还快一些,多次测试后基本如此. 如下图: where: in ...

  3. react后台项目开发(一)

    1. 项目开发准备 描述项目 技术选型 api 接口(4部分:3请求{url,请求方式,请求参数格式}, 1响应数据格式)/ 接口文档/ 测试接口 2. 启动项目开发 使用react脚手架创建项目 开 ...

  4. Springcloud 配置 | 史上最全,一文全懂

    Springcloud 高并发 配置 (一文全懂) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Spring ...

  5. Nginx 常用模块

    Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. ...

  6. mySql中Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

    报错信息 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'a.id' ...

  7. Android给Viewpager默认指定页

    上结果代码 private void setViewPaperItem(int position) { try { Class c = Class.forName("android.supp ...

  8. .net core 2.1 基于Jwt的登录认证

    1.新建一个.net core2.1 基于 api 的工程,引用Microsoft.AspNetCore.Authentication.JwtBearer 包 2.新建一个Token的实体类,一个Jw ...

  9. Java面试基础 -- Linux篇

    0.日常命令 cd 目录路径: 跳转到指定目录 mkdir 目录名称:新增目录 pwd: 获取当前路径 su: 切换用户 ll: 查看当前目录侠的文件和目录 rm -rf 目录: 递归删除指定目录下的 ...

  10. for循环使用element的折叠面板遇到的问题-2

    需求:每次添加一个折叠面板时,让最新的折叠面板展开,其余的关闭 动态控制展开折叠面板,首先绑定name,v-model = activeName 我们的项目中是当添加折叠面板时,直接push进这个数组 ...