基于Composer的Laravel扩展包开发工作流
使用场景
在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库;并且自己的其他项目也有需求引用自定义的第三方包;甚至自己会发布修改后的第三方包;
读完本文你讲获得:
- Git Submodule的基本使用
- 从本地加载第三方包
- 从自定义仓库地址获取扩展包
- 快速创建第三方包
本文是在我自己想要创建一个基础第三方包的时候记录下的操作步骤
1、利用git submoudle在已有项目中使用第三方包
通常利用composer安装的包均在
vendor目录下,并且仓库地址均指向第三方包作者的仓库,而这时候修改第三方包,一是无法纳入git管理库,二是提交pull requests需要等待作者的审核更新,未必会采纳
1)Fork对方项目
2)下载fork后的项目到本地
```> mkdir packages
> git submodule add https://github.com/mpandar/laravel-packager.git packages/mpandar/laravel-packager
```
3)之后可以对该包内容进行编辑,并在packages/mpandar/laravel-packager目录使用git的命令,提交文件
2、调整composer.json内容,使项目能够使用自定义包内容
// autoload - psr-4 是项目主目录src
// autoload - files 主要就是加载helper函数
// autoload-dev - psr-4 主要是test
"autoload": {
"psr-4": {
"JeroenG\\Packager\\": "packages/mpandar/laravel-packager/src"
},
"files": [
"packages/mpandar/wechat/src/Kernel/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"JeroenG\\Packager\\Tests\\": "packages/mpandar/laravel-packager/tests"
}
},
添加完成后要运行
composer dumpautoload,否则下面添加ServiceProvider会报错,找不到对应ServiceProvider
3、添加包的ServiceProvider
由于laravel的
package:discover是读取vendor/composer/installed.json这个文件中安装的包,而我们的包是手动添加,所以无法自动添加ServiceProvider,手动在app.php中添加
'providers' => [
JeroenG\Packager\PackagerServiceProvider::class,
],
'aliases' => [
'CreditsShop' => Mpandar\CreditsShop\Facades\CreditsShop::class,
],
通过
php artist list可以看到该包中的命令已经被添加
4、其他项目使用自定义包
JeroenG\Packager是用来快速创建基于laravel的扩展包,使用过程中,发现一点小的问题,比如 php artisan packager:new mpandar laravel-cart理想的目录结构应该是
packages
|-mpandar
|-laravel-cart
|-src
|-LaravelCartProvider.php
|-LaravelCart.php
|-Facades
|-LaravelCart.php
但其实际创建的Provider却命名为laravel-cartProvider,如果使用php artisan packager:new mpandar LaravelCart,目录名称又会错,所以我修复了这个问题(也可能是我不会用...)
// dev-master 表示取master分支
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mpandar/laravel-packager"
}
],
"require": {
"jeroen-g/laravel-packager": "dev-master"
},
// composer update 即可
5、为Laravel开发扩展包
利用
jeroen-g/laravel-packager很容易创建一个扩展包基础项目
```> php artisan packager:new mpandar credits-shop
0/6 [>---------------------------] 0% Creating package mpandar\credits-shop...
1/6 [====>-----------------------] 16% Creating packages directory...
2/6 [=========>------------------] 33% Creating vendor...
3/6 [==============>-------------] 50% Downloading skeleton...
4/6 [==================>---------] 66% Replacing skeleton placeholders...
5/6 [=======================>----] 83% Dumping autoloads and discovering package...
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
6/6 [============================] 100% Package created successfully!
```
其创建的目录结构:

并在composer.json以及app.php中自动添加了相关配置。
ok,接下来就可以进行扩展包的开发了!
原文地址:https://segmentfault.com/a/1190000016069204
基于Composer的Laravel扩展包开发工作流的更多相关文章
- 基于Composer的Laravel扩展包开发工作流 ,实现laravle项目的文件管理(记录成长)
PHP Composer包开发 基于Composer的Laravel扩展包开发工作流 实现laravle项目的文件管理,添加文件/文件夹,删除文件,查看代码/文件(代码支持缩进,支持语法高亮) com ...
- 使用 Composer 安装Laravel扩展包的几种方法
使用 Composer 安装Laravel扩展包的几种方法 以下的三种方法都是需要你在项目的根目录运行 第一种:composer install 如有 composer.lock 文件,直接安装,否则 ...
- 如何正确使用 Composer 安装 Laravel 扩展包
我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...
- laravel扩展包开发步骤总结
1. 创建包 php artisan workbench vendor/package --resources 注: vendor:开发商名 package:包名 2.修改下包里co ...
- 如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer 发布于 2019-01-22 cxp1539 1074 Vie 开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...
- laravel composer 扩展包开发(超详细)
laravel composer 扩展包开发(超详细) 置顶 2018年02月05日 11:09:16 Simael__Aex 阅读数:10396 版权声明:转载请注明出处:http://blo ...
- 如何开发、本地测试、发布 Laravel 扩展包?
如何开发.本地测试.发布 Laravel 扩展包? Laravel/ 1年前/ 4022 / 11 现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...
- 【转】下载量最高的 100 个 Laravel 扩展包推荐
说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现 ...
- laravel 安装 Laravel 扩展包
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...
随机推荐
- Linux 下Python调用C++编写的动态库
在工程中用到使用Python调用C++编写的动态库,结果报如下错误: OSError: ./extract_str.so: undefined symbol: _ZNSt8ios_base4InitD ...
- 手把手教你把Vim改装成一个IDE编程环境(图文)【转】
本文转载自: http://blog.csdn.net/wooin/article/details/1858917
- php使用163邮箱发送邮件
email.class.php文件 <? class smtp { /* Public Variables */ var $smtp_port; var $time_out; var $host ...
- thinkphp结合云之讯做短信验证码
thinkphp结合云之讯做短信验证码先去云之讯注册账号 网址http://www.ucpaas.com/ 注册云之讯平台账号,即可免费获得10元测试费用测试够用啦 解压附件到 ThinkPHP\Li ...
- [Apple开发者帐户帮助]九、参考(1)证书类型
该证书类型有助于开发者帐户和Xcode的标识证书. 类型 目的 APNs Auth Key 生成服务器端令牌,以替代通知请求的证书. Apple推送服务 在通知服务和APN之间建立连接,以向您的应用提 ...
- [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)
创建临时配置文件以在设备上运行您的应用程序而无需Xcode.在开始之前,您需要一个App ID,一个分发证书和多个注册设备. 有关完整的临时配置文件工作流程,请转到Xcode帮助中的分发到已注册设备( ...
- IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位
问题说明: ios中,键盘的弹起,页面会往上挪动,使输入框展示在页面中间,键盘隐藏页面会下挪恢复原状. 在微信移动端,ios页面不恢复,下方有留白. 收起键盘的瞬间,如果有弹窗弹出,此时时页面内容应区 ...
- MySQL简明教程---级联约束
- MySQL的or/in/union与索引优化 | 架构师之路
假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...
- SQL Server应用模式之OLTP系统性能分析
OLTP系统的最大特点,是这类应用里有大量的,并发程度比较高的小事务,包括SELECT.INSERT.UPDATE和DELETE. 这些操作都比较简单,事务时间也不会很长,但是要求的返回时间很严格,基 ...