![](/img/trans.png)
[英]Composer install package in front of vendor folder not inside as a third party
[英]Safely edit a third party composer (vendor) package in Laravel & prevent losing customized changes on release of a new version of the package
我想编辑我在Laravel 5项目中从作曲家中提取的一个包,但是我相信如果我运行了composer update
并且已经发布了这个包的新版本,我将失去所有的更改。 我该如何编辑包? 有没有办法将包从供应商目录中复制出来,以便我可以在项目的其他地方使用它?
简单,快速,安全的方法:
首先从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,还有一个新选择。
将它添加到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
由于你指出的原因,编辑作曲家包实际上是不安全的。
我所做的是扩展我想要/需要改变的类。
我在这里使用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))
);
}
}
如果您想要更改某个类的包,则必须这样做
创建一个扩展包类并进行更改的类
创建一个服务提供程序,扩展该类的服务提供程序并更改registerBinding
类以绑定您的扩展类
将新服务提供providers
放在config\\app
中的providers
数组中
禁用此程序包的程序包发现,您可以在应用程序的composer.json文件的额外部分列出程序包名称:
"extra": { "laravel": { "dont-discover": [ "barryvdh/laravel-debugbar" ] } },
如果你想保留你的更改并同时从原始仓库更新包,你可以分叉这个包并指向composer来从你的fork,而不是原始的repo。
您所要做的就是将您的fork添加为存储库并更新版本约束以指向您的自定义分支。 您的自定义分支名称必须以dev-为前缀。
更新您的composer.json
文件,如下所示:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/MyGithub/html"
}
],
"require": {
"laravelcollective/html": "dev-bugfix"
}
}
请注意,除了指定bugfix分支外,不要更改require语句。 您仍然引用上游包(laravelcollective / html),而不是您的个人分支(MyGithub / html)。
另外,请注意dev-
自动添加,因此分支名称是错误bugfix
而不是dev-bugfix
。 如果你将你的分支命名为dev-bugfix
你将需要它作为dev-dev-bugfix
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.