在Laravel中安全地编辑第三方作曲家(供应商)软件包,并防止在发布新版本的软件包时丢失自定义更改
2022-08-30 17:09:14
我想在我的Laravel 5项目中编辑我从作曲家那里提取的软件包,但是我相信如果我运行并且发布了这个软件包的新版本,我将丢失所有更改。我应该如何编辑包?有没有办法将包从供应商目录中复制出来,以便我可以在项目中的其他位置使用它?composer update
我想在我的Laravel 5项目中编辑我从作曲家那里提取的软件包,但是我相信如果我运行并且发布了这个软件包的新版本,我将丢失所有更改。我应该如何编辑包?有没有办法将包从供应商目录中复制出来,以便我可以在项目中的其他位置使用它?composer update
简单、快速、安全的方法:
首先将其从“需要”中删除
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.3.*",
"laravelcollective/html": "^5.3.0", <==== remove this line
"barryvdh/laravel-debugbar": "^2.3",
"doctrine/dbal": "^2.5"
},
然后将其添加到自动加载
"autoload": {
"psr-4": {
"App\\": "app/",
"Collective\\Html\\": "packages/laravelcollective/html/src", <==== add this line
},
}
请不要忘记跑步
composer dumpauto
步骤 3 的替代方法。
如果您使用的是最新版本的 Composer,则还有一个新的替代方案。
将此添加到 composer.json
"repositories": [
{
"type": "path",
"url": "./packages/laravelcollective"
}
]
然后将包的版本修改为dev-master
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.3.*",
"laravelcollective/html": "dev-master", <==== this line
"barryvdh/laravel-debugbar": "^2.3",
"doctrine/dbal": "^2.5"
},
最后
composer update
实际上,编辑作曲家包是不安全的,原因正是你所指出的。
我所做的是扩展我想要/需要更改的类。
我在这里用文件系统类完成了它。它不能确保它不会中断,但它确实允许您在不覆盖更改的情况下进行更新。
配置/应用.php
<?php
return [
'providers' => [
// 'Illuminate\Filesystem\FilesystemServiceProvider',
'MyApp\Filesystem\FilesystemServiceProvider',
],
'aliases' => [
...
],
];
MyApp\Filesystem\FilesystemServiceProvider.php
<?php namespace MyApp\Filesystem;
use Config;
use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use League\Flysystem\Dropbox\DropboxAdapter;
use Illuminate\Filesystem\FilesystemManager as LaravelFilesystemManager;
class FilesystemManager extends LaravelFilesystemManager{
public function createDropboxDriver(array $config)
{
$client = new DropboxClient($config['token'], $config['app']);
return $this->adapt(
new Filesystem(new DropboxAdapter($client))
);
}
}