如何在本地开发Composer包
如何在本地开发Compoer包
周煦辰
2019-05-26
记录一下如何在本地开发一个Composer包,以及如何发布到Packgist。
假设你要开发一个名叫xuchen/biubiubiu
的包。
准备工作
你得保证你的系统用已经安装了
- Git
- 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包中。当然了,前提是:
- 原本的代码就是你的个人项目,没有使用你的上班时间及公司设备来开发。
- 或者,公司支持你的开源行为。
既然是新的包,我们自然要去Github上开个新坑,,Github上开新坑的步骤我就不赘述了。在Github上开一个Repo的目的并不仅仅是为了代码管理,最后我们想要将代码发布到Packgist也需要用到Github。
假设我们新开的GithubRepo叫Biubiubiu
好了。
Clone你的Repo并放到随便什么位置
在Github上开好新坑了,就需要把代码Clone下来,我们就放在如下位置吧:
d:/workspace/biubiubiu
使用Composer初始化你的项目
到上一步的代码目录中,运行:
composer init
name
填写xuchen/biubiubiu
,description
随便,stability
填dev
,require
暂时可以不填,等到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/biubiubiu
的symlink
。此时,正在开发中的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。
在biubiubiu
的composer.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包的更多相关文章
- 开发composer包,打通github和packagist,并自动更新
1. 首先需要本地安装好composer,并配置好环境变量,在命令行输入composer,显示以下信息就表示正常安装 2. 在github对应项目的根目录下进行初始化composer 初始化完成后,就 ...
- 动手开发自己的第一个 composer 包
原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说 ...
- laravel5.5开发composer扩展包
目录 1. 下载laravel框架,并命名(framework) 2. 创建相关目录 3. 项目根目录下的composer.json文件中声明命名空间 4. 在包的根目录(packages/arche ...
- 开发自己的composer包
1. 创建一个开发目录 mkdir project cd project 2. 利用composer生成一个composer.json composer init > Welcome to th ...
- 如何创建自己的composer包
composer中文网 :https://www.phpcomposer.com/ 一.前期准备: composer 安装 Windows安装: 1.下载安装包,https://getcomposer ...
- 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)
laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...
- 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境
1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...
- 从零创建发布属于自己的composer包
原文地址:https://www.wjcms.net/archives/从零创建发布属于自己的composer包 今天给大家讲解一下如何从零创建发布属于自己的composer包. composer包用 ...
- Node.js配合node-http-proxy解决本地开发ajax跨域问题
情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...
随机推荐
- pytest系列(四)- pytest+allure+jenkins - 持续集成平台生成allure报告
pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富. allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例 ...
- linux 源设置
ubuntu 18.04.3 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak cat > /etc/apt/sources.lis ...
- R-4 方差分析
本节内容: 1:方差分析的原理 2:单因数方差分析 .双因数分析 3:交互项 一:方差分析是原理 方差分析原理 对总体均值的假设检验,有三种情况:1.总体均值与某个常数进行比较:2.两个总体均值之间的 ...
- 阿里面试官:字符串在JVM中如何存放?90%的人就真的只回答在哪里存放
目录: 一道面试题的引出 案例分析 intern 源码分析 总结 1. 一道面试题的引出 在面试BAT这种一线大厂时,如果面试官问道:字符串在 JVM 中如何存放?大多数人能顺利的给出如下答案: 字符 ...
- 云数据库MongoDB版清理oplog日志和compact命令详解
1.问题描述: 今天看到公司mongodb的oplog有点大,看到云数据库MongoDB版日志清理策略. MongoDB数据库在长期频繁地删除/写入数据或批量删除了大量数据,将产生很多物理空间碎片. ...
- css知识笔记:水平居中(别只看,请实操!!!)
css实现元素的水平居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...
- 为做了面向互联网部署(IFD)的Dynamics 365定制登录账号格式
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- iOS swift 带有attributeString的多行文本label
class AttributeStringGenerator { var attributeString: NSMutableAttributedString! var lineSpacing: CG ...
- Servlet 使用介绍(2)
说明 本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数res ...
- java使用POI实现Excel批量导入数据
1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...