在 Laravel & 中安全地编辑第三方作曲家(供应商)包防止在发布新版本的软件包时丢失自定义更改软件包、自定义、第三方、新版本

2023-09-06 16:04:06 作者:新鲜劲

我想在我的 Laravel 5 项目中编辑从 composer 提取的包,但是我相信如果我运行 composer update 并且该包的新版本已经发布,我将失去所有我的变化.我应该如何去编辑包?有没有办法将包从供应商目录中复制出来,以便我可以在项目的其他地方使用它?

I want to edit a package I pulled from composer in my Laravel 5 project, however i believe that if I ran composer update and a new version of this package has been released, I will lose all of my changes. How should I go about editing the package? Is there a way to copy package out of the vendor directory so I can use it somewhere else in my project?

推荐答案

编辑 composer 包实际上是不安全的,因为你指出的原因.

It actually isn't safe to edit composer packages, for the very reason you point out.

我所做的是扩展我想要/需要更改的类.

What I do is extends the classes that I want/need to change.

我在这里使用 Filesystem 类完成了它.它不能确保它不会中断,但它可以让您在不覆盖更改的情况下进行更新.

I have done it here with the Filesystem class. It doesn't ensure that it won't break, but it does let you update without overwriting your changes.

config/app.php

<?php

return [

    'providers' => [

//        'IlluminateFilesystemFilesystemServiceProvider',
        'MyAppFilesystemFilesystemServiceProvider',
    ],

    'aliases' => [
        ...
    ],

];

MyAppFilesystemFilesystemServiceProvider.php

<?php namespace MyAppFilesystem;

use Config;
use Storage;
use LeagueFlysystemFilesystem;
use DropboxClient as DropboxClient;
use LeagueFlysystemDropboxDropboxAdapter;
use IlluminateFilesystemFilesystemManager 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))
        );
    }
}