使用场景

在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库;并且自己的其他项目也有需求引用自定义的第三方包;甚至自己会发布修改后的第三方包;

读完本文你讲获得:

  • 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内容,使项目能够使用自定义包内容

composer的包自动发现机制其实就是利用的psr-4(中文)


// 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扩展包开发工作流的更多相关文章

  1. 基于Composer的Laravel扩展包开发工作流 ,实现laravle项目的文件管理(记录成长)

    PHP Composer包开发 基于Composer的Laravel扩展包开发工作流 实现laravle项目的文件管理,添加文件/文件夹,删除文件,查看代码/文件(代码支持缩进,支持语法高亮) com ...

  2. 使用 Composer 安装Laravel扩展包的几种方法

    使用 Composer 安装Laravel扩展包的几种方法 以下的三种方法都是需要你在项目的根目录运行 第一种:composer install 如有 composer.lock 文件,直接安装,否则 ...

  3. 如何正确使用 Composer 安装 Laravel 扩展包

    我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...

  4. laravel扩展包开发步骤总结

    1. 创建包 php artisan workbench vendor/package --resources     注:  vendor:开发商名   package:包名   2.修改下包里co ...

  5. 如何开发 Laravel 扩展包并发布到 Composer

    如何开发 Laravel 扩展包并发布到 Composer  发布于 2019-01-22 cxp1539  1074 Vie   开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...

  6. laravel composer 扩展包开发(超详细)

    laravel composer 扩展包开发(超详细) 置顶 2018年02月05日 11:09:16 Simael__Aex 阅读数:10396    版权声明:转载请注明出处:http://blo ...

  7. 如何开发、本地测试、发布 Laravel 扩展包?

    如何开发.本地测试.发布 Laravel 扩展包?  Laravel/ 1年前/  4022 /  11   现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...

  8. 【转】下载量最高的 100 个 Laravel 扩展包推荐

    说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现 ...

  9. laravel 安装 Laravel 扩展包

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...

随机推荐

  1. 批量配置SSH 免密钥登录脚本

    [root@c3-zabbix-serv hurl]# cat sendsshkey.sh    #!/bin/bash  if [ -z $1 ]; then echo "Usage  : ...

  2. 初识bigdata时的一些技能小贴士

    既然小豆腐如此给力,而且充分的利用主动学习的优势,已经有了迅速脑补,压倒式的优势,不过这只是表面而已,一切才刚刚开始,究竟鹿死谁手,还有待验证. 以上可以看到,小豆腐为什么拼命的要teach我们了么, ...

  3. POJ1061 青蛙的约会 exgcd

    这个题虽然很简单,但是有一个比较坑的地方,就是gcd不一定是1,有可能是别的数.所以不能return 1,而是return a; 题干: Description 两只青蛙在网上相识了,它们聊得很开心, ...

  4. zhw大神线段树姿势

    ; i<; i++) tree[i][]=tree[i][]=i; ; i>=; i--) tree[i][]=tree[i+i][], tree[i][]=tree[i+i+][]; v ...

  5. 洛谷P1341 无序字母对(欧拉回路)

    P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...

  6. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

  7. Idea使用Maven搭建SpringMVC的HelloSpringMvc并配置插件Maven和Jetty

    这篇博文只是纯粹的搭建一个SpringMVC的项目, 并不会涉及里面配置文件该写些什么. 只是纯粹的搭建一个初始的Hello SpringMVC的项目. 废话不多说,上图. 1.  打开IDEA 并且 ...

  8. MAC应用无法打开或文件损坏的处理方法

    在MAC下安装一些软件时提示"来自身份不明开发者",其实这是MAC新系统启用了新的安全机制.默认只信任 Mac App Store 下载的软件和拥有开发者 ID 签名的应用程序.换 ...

  9. 服务器上oracle的监听设置

    1.查看本机的计算机名 2.修改etc/host 3.修改oracle的listener.ora(我服务器上的路径:) 4.修改tnsnames.ora(和上边文件一个目录)

  10. [转]linux之at指令详解

    转自:http://www.2cto.com/os/201409/336183.html 指令:at定时任务,指定一个时间执行一个任务,只能执行一次. 语法:# at [参数] [时间]at> ...