我想在我的Laravel 5项目中编辑我从作曲家中提取的一个包,但是我相信如果我运行composer update
并且已经发布了这个包的新版本,我将失去所有的更改。我该如何编辑包?有没有办法将包复制出供应商目录,以便我可以在项目的其他地方使用它?
答案 0 :(得分:13)
简单,快速,安全的方法:
首先将其从require
中删除"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.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
答案 1 :(得分:3)
由于你指出的原因,编辑作曲家包实际上并不安全。
我所做的是扩展我想要/需要改变的类。
我在这里使用Filesystem类完成了它。它并不能确保它不会中断,但它确实允许您在不覆盖更改的情况下进行更新。
<强>配置/ app.php 强>
<?php
return [
'providers' => [
// 'Illuminate\Filesystem\FilesystemServiceProvider',
'MyApp\Filesystem\FilesystemServiceProvider',
],
'aliases' => [
...
],
];
<强> MyApp的\文件系统\ 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))
);
}
}
答案 2 :(得分:1)
如果要更改软件包的类,则必须
创建一个扩展包类并进行更改的类
创建一个扩展该类的服务提供者的服务提供者,并更改$configArray = [
'client_id' => 'foo',
'client_secret' => 'bar'
];
$client = new Google_Client($configArray);
类以绑定您的扩展类
在registerBinding
的{{1}}数组中放置新服务提供商
禁用此软件包的软件包发现,您可以在应用程序的composer.json文件的附加部分中列出软件包名称:
providers
答案 3 :(得分:1)
如果您要保留更改并同时从原始存储库更新软件包,则可以分叉此软件包并指向作曲家从您的存储库中拉出,而不是原始存储库。
您要做的就是将fork添加为存储库并更新 版本约束以指向您的自定义分支。您的自定义分支 名称必须带有dev-前缀。
如下更新您的composer.json
文件:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/MyGithub/html"
}
],
"require": {
"laravelcollective/html": "dev-bugfix"
}
}
请注意,除了指定bugfix分支外,您无需更改require语句。您仍然引用上游包(laravelcollective / html),而不是您的个人fork(MyGithub / html)。
还请注意,dev-
是自动添加的,因此分支名称是bugfix
而不是dev-bugfix
。如果您将分支命名为dev-bugfix
,则将其命名为dev-dev-bugfix
。
答案 4 :(得分:-3)