使用场景
在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库;并且自己的其他项目也有需求引用自定义的第三方包;甚至自己会发布修改后的第三方包;读完本文你讲获得:
Git Submodule的基本使用
从本地加载第三方包
从自定义仓库地址获取扩展包
快速创建第三方包
本文是在我自己想要创建一个基础第三方包的时候记录下的操作步骤1、利用git submoudle在已有项目中使用第三方包
通常利用composer安装的包均在vendor目录下,并且仓库地址均指向第三方包作者的仓库,而这时候修改第三方包,一是无法纳入git管理库,二是提交pull requests需要等待作者的审核更新,未必会采纳
> mkdir packages > git submodule add https://github.com/mpandar/laravel-packager.git packages/mpandar/laravel-packager
composer的包自动发现机制其实就是利用的psr-4(中文)
// autoload - psr-4 是项目主目录src // autoload - files 主要就是加载helper函数 // autoload-dev - psr-4 主要是test "autoload": { "psr-4": { "JeroenGPackager": "packages/mpandar/laravel-packager/src" }, "files": [ "packages/mpandar/wechat/src/Kernel/Helpers.php" ] }, "autoload-dev": { "psr-4": { "JeroenGPackagerTests": "packages/mpandar/laravel-packager/tests" } },
添加完成后要运行 composer dumpautoload,否则下面添加ServiceProvider会报错,找不到对应ServiceProvider3、添加包的ServiceProvider
由于laravel的 package:discover 是读取 vendor/composer/installed.json 这个文件中安装的包,而我们的包是手动添加,所以无法自动添加ServiceProvider,手动在app.php中添加
"providers" => [ JeroenGPackagerPackagerServiceProvider::class, ], "aliases" => [ "CreditsShop" => MpandarCreditsShopFacadesCreditsShop::class, ],
通过 php artist list 可以看到该包中的命令已经被添加4、其他项目使用自定义包
JeroenGPackager是用来快速创建基于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 mpandarcredits-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 > IlluminateFoundationComposerScripts::postAutoloadDump > @php artisan package:discover 6/6 [============================] 100% Package created successfully!
其创建的目录结构:
并在composer.json以及app.php中自动添加了相关配置。
ok,接下来就可以进行扩展包的开发了!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29275.html
摘要:在每一个的项目主页上,展示了扩展包的介绍版本号仓库地址如完整的文件,以及其他一些有用的信息。官方文档给出了总结服务提供者是所有应用程序引导中心。你可以浏览位于目录下的所有应用程序服务提供者。 当你接手一个新项目的时候,可能会感到无从下手,如果不熟悉编程,则更是如此。那么,我们该从哪儿入手呢?项目代码的哪些部分我们需要着重了解?下面我们看看 Laravel 项目的几个通用的部分。 项目文...
摘要:在每一个的项目主页上,展示了扩展包的介绍版本号仓库地址如完整的文件,以及其他一些有用的信息。官方文档给出了总结服务提供者是所有应用程序引导中心。你可以浏览位于目录下的所有应用程序服务提供者。 showImg(https://segmentfault.com/img/bV6vPF?w=1200&h=500); 当你接手一个新项目的时候,可能会感到无从下手,如果不熟悉编程,则更是如此。那么...
摘要:目的为了减少重复和新项目的配置麻烦等问题,就是为了骗星星如现有的生成工具虽然好用,但是不太喜欢样式和代码结构。有些本地,测试,线上的配置需要频繁改动的需要。 目的 为了减少重复 CURD 和新项目的配置麻烦等问题,(就是为了骗星星:LaravelPlus )如: 现有的 infyomlabs/laravel-generator CODE 生成工具虽然好用,但是不太喜欢样式和代码结构。...
摘要:查找保存下载用搭建自己的缓存仓库权限管理的好选择基于封装的后台管理系统,支持手机和端访问支付宝风格的验证器后台系统微信接口的部署脚本开发的博客系统百度推送自动记录用户行为扩展一个项目管理系统根据生成对应导航的状态 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...
摘要:流程一新项目流程创建,并添加依赖到的扩展包运行,安装扩展包并生成提交到代码版本控制器中,如流程二项目协作者安装现有项目克隆项目后,根目录下直接运行从中安装指定版本的扩展包以及其依赖此流程适用于生产环境代码的部署。 本文经授权转自 PHPHub 社区 问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: showImg(https://dn-...
阅读 2882·2021-11-24 09:39
阅读 2454·2019-08-30 15:53
阅读 3024·2019-08-30 13:47
阅读 1295·2019-08-30 12:50
阅读 1480·2019-08-29 16:31
阅读 2641·2019-08-29 13:14
阅读 1558·2019-08-29 10:55
阅读 789·2019-08-26 13:32