最近有个想法 ,想自己写一套框架,仔细研究了下,发现需要的专业知识储备(composer、psr、设计模式等等)、还要具备长时间开发经验的积累。
先来说说产生这个想法的原因,公司的跨境电商后台系统很臃肿(大概是7,8年前的项目,一直维护到现在,光是代码文件就超过了1G,多大自己脑补吧,系统各种全局变量、过程式编程、面向对象编程、新技术老技术应有尽有,对于新手来说,想一想头都是要爆炸的),商业方面,一个项目能有这么长的生命周期,无疑是很成功的;技术方面,给你个眼神,自己体会吧(过过嘴瘾)。 毕竟技术服务于商业,仓储、物流、商品这种业务场景,微服务简直就是为这种业务场景量身定制的,但是无奈可能在资本家眼里,能抓住老鼠的就是好猫,我只想说,用框架不香? 微服务不香?或者自己开发个适用于目前情况的框架不香?
可能大家很喜欢使用框架开发,成熟的框架不仅仅在项目开发速度、规范上都更新适合于团队开发,能极大的降低维护成本。但 对于新手来说,可能框架就像个黑盒子一样,但是随着开发经验的积累,探索,思考。你会发现,其本质上就是一个一个扩展包组成的,再加上框架的作者融入自己的想法,成熟的设计模式,以及开源作者们的日记月累的不断贡献,日渐就形成了一个成熟的框架。
今天给大家介绍的就是框架组成的基石-依赖包。之前给大家介绍过了基于yii2 扩展包的开发基于yii2扩展包的开发 (属于公有源的搭建),接下来深入了解一下什么是源,还有什么是私有源、公有源和本地源 以及 私有源和本地源的搭建,公有源就不接介绍了搭建详情请看(基于yii2扩展包的开发博文末),以及composer 是怎么管理他们的。
在介绍之前,首先我们先来抛出几个问题吗,直接来点干货:
- composer 是什么,怎样管理项目依赖的?
- 什么是源?
- 什么又是公有源、私有源和本地源?
- 公有源、私有源和本地源怎么搭建以及他们的适用场景?
先来说说第一个问题:composer 是个依赖管理工具,它会根据你的包声明解决项目中的依赖管理问题。但是项目内这些依赖是怎样被项目加载的呢,在安装完包之后,composer 会自动生成一个类自动加载文件,该文件通常是在框架的入口文件加载它。项目在运行的时候,怎么去找这些包,其实你仔细的看看composer.json文件 ,有个autoload 关键字,会根据你声明的psr标准去生成一个命名空间和声明的包逻辑代码的映射关系,通过类自动加载文件可以找到这些映射关系。
但是我们去什么地方找到适合自己项目的包并声明去下载它呢?这个时候就不得不说到源,源其实就是包的下载地址。有的人又要开始问了,有的包只涉及到的公司的机密,只能在公司或者团队内部使用,但是又不想大家去重复开发某个功能模块,这个时候就要说说我们的私有源了,我们可以在私有仓库中创建个项目,其声明和开发方式和开源依赖是一样的,如果你开发过开源依赖扩展包,那么私有源就很容易搭建了。下面我们来介绍下私有源的开发、搭建以及安装(在安装方式上紧紧稍有不一样)。
我们一般不管是私有源还是公有源在开发的时候都要先在本地测试开发,我们先来了解下本地扩展依赖的环境搭建、开发以及测试;
1、先创建一个文件夹,依赖扩展包逻辑代码存放的地方。然后用命令行工具切换到该目录下,执行composer init 命令,当然前提是已经安装好coomposer了。执行完composer init 命令后,会提示你输入包名称、描述、关键词(开源项目的话,是为了便于搜索)等相关信息;
2、要安装到项目里面,但是没上传的仓库里面那怎么进行安装、测试以及开发呢??下面我来给大家介绍下,往下看:
{
"name": "illusion/test",
"description": "test",
"authors": [
{
"name": "lkq0929",
"email": "lkqlink@163.com"
}
],
"require": {
},
"repositories": {
"0": {
"type": "path",
"url": "./illusion-excel"
},
"1": {
"type": "composer",
"url": "https://asset-packagist.org"
},
"logistic": {
"type": "vcs",
"url": "https://g.XXXX.com/XXXXX/XXXX.git"
}
}
}
看composer.json 文件中的repositories键对应的里面的内容,那么下面都代表什么意思呢? url 很好理解,就是包下载地址,也就是我们所说的源, 那type 关键词 代表的意思呢?顾名思义,就是源类型,来区分公有源,私有源以及本地源的。既然我们本地要进行开发,那就先来介绍下本地源(严格来说,其实也属于私有源)。
本地源配置方式,可以手动配置也可以命令配置:
1、 命令配置:
composer config repositories.0 path "./illusion-excel"
// repositories关键词后面的0 代表什么呢?其实也没有什么实际含义,仅仅就是个项目中源的标识,可以为数组或字符串。
//path 就是关键词repositories.0.type 的值,代表本地源
// "./illusion-excel" 就是关键词 repositories.0.url 的值,代表源地址
执行完命令后,composer 文件里面就生成了如下的下载源配置,也可以手动配置
"repositories": {
"0": {
"type": "path",
"url": "./illusion-excel"
}
}
}
2、配置命名空间,一定要以 \\ 符号结束。
3、任意位置新创建文件夹,新建一个php入口文件,然后在改文件夹中用命令行执行 composer require 本地包名称 -vvv 安装,安装成功后,将composer 自动加载文件引入到php 入口文件中,接下来就可以就行开发和测试了,写扩展包安装使用说明文件和使用示例。
上面已经详细讲解了本地包的创建、开发和测试,那么, 本地私有包测试好之后,有人就会问了,团队内其他小伙伴怎样去安装使用呢????
下面就来讲解怎么把它变成真正的私有源
如果你的本地包还有要依赖的开源扩展包,就是composer.json 文件下 的关键词 repositories 下配置好开源扩展包的源以及类型,例如:
repositories : {
"0": {
"type": "composer",
"url": "https://asset-packagist.org"
}
}
最后直接将开发好的安装包上传到自家的私有仓库中,团队中的小伙伴只需要执行下面命令直接就可以安装使用你的扩展依赖了。
composer config repositories.XXXX vcs "私有仓库依赖项目地址"
composer require 私有源名称
//repositories.XXX XXX代表私有源在 repositories 关键词中配置中的唯一键值。
//vcs 代表某一类源地址,可以是 git、SVN、hg等代码仓库类型
是不是很简单,如果看完后不清楚或文章有讲解错误的地方,欢迎留言指正,相互学习,邮箱:lkqlink@163.com