Laravel 框架下扩展包二次开发
约定要进行二开本地的扩展包都放在 packages/ 下
在项目根目录下创建packages文件夹,然后运行:
composer config repositories.0 path "packages/*"
此时的 composer.json 会多出一项配置:
"repositories": [{
"type": "path",
"url": "packages/*"
}]
也就是说,Laravel 在收到 HTTP 请求启动时,触发自动加载搜索模块的时候,也会搜索 packages/ 下的各个目录。
"require": {
"php": "^7.3|^8.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"jormin/laravel-ddoc": "^1.1",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5"
},
我们以自定义 jormin/laravel-ddoc
为例,在本地创建 packages
目录,然后将自定义的包拷贝到 packages/
下,然后将 composer.json
定义的版本改为 dev-master(dev-分支名),参考如下方式修改:
"require": {
"php": "^7.3|^8.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"jormin/laravel-ddoc": "dev-master",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5"
},
然后运行 composer update jormin/laravel-ddoc
,可以看到 composer 移除了原位置(vendor/jormin/laravel-ddoc
)的源码,创建了一个符号链接,把 vendor/jormin/laravel-ddoc
指向了本地的 packages/laravel-ddoc
。实现本地的修改的替换加载。
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
- Upgrading jormin/laravel-ddoc (dev-master d7608d3 => dev-master)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
- Removing jormin/laravel-ddoc (dev-master d7608d3)
- Installing jormin/laravel-ddoc (dev-master): Junctioning from packages/laravel-ddoc
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Generating optimized autoload files
接下来我们就可以根据我们的需求对packages/laravel-ddoc
做自定义修改啦!