如何使用 composer 恢复损坏的 laravel 项目
How to recover destroyed laravel project with composer
我正在使用 laravel 4.2。
今天我不得不重新安装我的一个插件,现在我所有的项目都被破坏了。
这是我的 composer.json 文件:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "4.2.*",
"barryvdh/laravel-debugbar": "~1.8",
"mews/captcha": "dev-master",
"prologue/alerts": "dev-master",
"yangqi/htmldom": "dev-master",
"scalia/sphinxsearch": "dev-master"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/libraries",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
},
"minimum-stability": "dev"
}
我想做的就是用其他东西改变 mews/captcha 插件。
实施我的新验证码插件后,我尝试使用 "composer update".
与作曲家更新项目
然后我意识到 prologue/alerts 不再支持 laravel 4.2,根据 github 和作曲家的错误。
Problem 1
- Conclusion: don't install laravel/framework 4.2.x-dev
- Conclusion: don't install laravel/framework v4.2.17
- Conclusion: don't install laravel/framework v4.2.16
- Conclusion: don't install laravel/framework v4.2.15
- Conclusion: don't install laravel/framework v4.2.14
- Conclusion: don't install laravel/framework v4.2.13
- Conclusion: don't install laravel/framework v4.2.12
- Conclusion: don't install laravel/framework v4.2.11
- Conclusion: don't install laravel/framework v4.2.10
- Conclusion: don't install laravel/framework v4.2.9
- Conclusion: don't install laravel/framework v4.2.8
- Conclusion: don't install laravel/framework v4.2.7
- Conclusion: don't install laravel/framework v4.2.6
- Conclusion: don't install laravel/framework v4.2.5
- Conclusion: don't install laravel/framework v4.2.4
- Conclusion: don't install laravel/framework v4.2.3
- Conclusion: don't install laravel/framework v4.2.2
- Installation request for prologue/alerts dev-master -> satisfiable by prologue/alerts[dev-master].
- Conclusion: don't install laravel/framework v4.2.1
- Conclusion: don't install laravel/framework v4.2.0
- prologue/alerts dev-master requires illuminate/session ~5 -> satisfiable by laravel/framework[5.0.x-dev], illuminate/session[5.0.x-dev, 5.1.x-dev, v5.0.0, v5.0.22, v5.0.25, v5.0.26, v5.0.28, v5.0.4].
- Can only install one of: laravel/framework[v4.2.0-BETA1, 5.0.x-dev].
- don't install illuminate/session 5.0.x-dev|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session 5.1.x-dev|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.0|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.22|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.25|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.26|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.28|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.4|don't install laravel/framework v4.2.0-BETA1
- Installation request for laravel/framework 4.2.* -> satisfiable by laravel/framework[4.2.x-dev, v4.2.0, v4.2.0-BETA1, v4.2.1, v4.2.10, v4.2.11, v4.2.12, v4.2.13, v4.2.14, v4.2.15, v4.2.16, v4.2.17, v4.2.2, v4.2.3, v4.2.4, v4.2.5, v4.2.6, v4.2.7, v4.2.8, v4.2.9].
我无法删除 prologue/alerts 插件。我只想恢复我的项目,我有旧的提交/备份文件。但是作曲家不让我这么做。
此外,尝试从 composer.json 中删除 prologue/alerts,并从 app.php 中删除其他属性,但 composer 仍然没有帮助我。
错误是"Class 'Prologue\Alerts\AlertsServiceProvider' not found",这意味着作曲家试图安装较新版本的prologue/alerts ?
提前致谢。
嗯,你可以看看prologuephp/alerts releases的榜单。如果您查看从 v0.3.0 到 0.4.0-beta.1 的 composer.json
,您会看到依赖项更改自:
"illuminate/config": "~4",
"illuminate/session": "~4",
"illuminate/support": "~4",
收件人:
"illuminate/config": "~5",
"illuminate/session": "~5",
"illuminate/support": "~5"
因此,如果您的项目正在使用 Laravel 4,您只需要使用正确的版本即可。在您的 composer.json
中,使用 "prologue/alerts": "0.3.0"
.
而不是 "prologue/alerts": "dev-master",
您的一般问题是您使用的是分支而不是版本。分支有两个主要问题:
- 它们不指向一次提交的独特代码,而是一个不断更新的移动目标。
- 它们本质上具有开发稳定性,当用作项目中的顶级依赖项时,这可能是一个可以接受的风险,但如果在必须包含在其他地方的包中使用,则会产生问题。
@milz 的回答指向了正确的方向,但您应该完全遵循:对于您使用的每个包,将对分支的每个引用替换为发布版本或版本范围。
mews/captcha - 已发布版本 1.0.1、2.0.0 和 2.0.1 - 只有 1.0.1 与 Laravel 4 兼容。您可能希望使用 1.0.*
来捕获错误修复,即使它们不太可能发生。
prologue/alerts - 发布版本 0.1.0、0.1.1、0.2.0、0.3.0 和 0.4.0。版本 0.1 和 0.2 需要 Laravel 4.0,0.3.0 允许任何 4.x,0.4.0 跳转到任何 Laravel 5.0 版本。选择 0.3.*
.
yangqi/htmldom - 没有发布版本。尽管很难:只要维护者不标记发布版本,您就应该避免使用这个包。它也没有正确说明它的依赖关系——它依赖于服务提供商的 Laravel。要求维护者标记发布,或切换到不同的包。这个包裹很可能会重复你现在正在经历的痛苦。
scalia/sphinxsearch - 版本 0.1、0.1.1 和 0.2 都与 Laravel 4 兼容 - 选择 0.2.*
.
请注意,对于所有版本,您可能还会考虑不仅接受错误修复,还考虑兼容更新。这会将版本要求从 x.y.*
更改为 ~x.y
。我会推荐这个。
另请注意,根据您使用的主分支版本,通过切换到标记版本,您可能会返回一些提交。这可能会恢复提交给 master 但从未标记为发布的错误修复。如果您发现您正在使用的软件包有未发布的错误修复,您也应该要求维护者发布这些错误修复。
根据他们的反应速度和对您请求的解决,您可能会决定继续使用该软件包,或者切换到其他软件包。
这是我到目前为止所做的:
- 已从 composer.json 文件中删除 "prologue/alerts":"dev-master",
- 在 app/config/app.php 中,从供应商和
'Alert' 中删除
'Prologue\Alerts\AlertsServiceProvider' => 'Prologue\Alerts\Facades\Alert' , 来自别名
- "composer update" 来自控制台。
这可能不是很好的解决方案,但我设法在没有不受支持的插件的情况下恢复了我的项目。
我正在使用 laravel 4.2。
今天我不得不重新安装我的一个插件,现在我所有的项目都被破坏了。
这是我的 composer.json 文件:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "4.2.*",
"barryvdh/laravel-debugbar": "~1.8",
"mews/captcha": "dev-master",
"prologue/alerts": "dev-master",
"yangqi/htmldom": "dev-master",
"scalia/sphinxsearch": "dev-master"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/libraries",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
},
"minimum-stability": "dev"
}
我想做的就是用其他东西改变 mews/captcha 插件。
实施我的新验证码插件后,我尝试使用 "composer update".
与作曲家更新项目
然后我意识到 prologue/alerts 不再支持 laravel 4.2,根据 github 和作曲家的错误。
Problem 1
- Conclusion: don't install laravel/framework 4.2.x-dev
- Conclusion: don't install laravel/framework v4.2.17
- Conclusion: don't install laravel/framework v4.2.16
- Conclusion: don't install laravel/framework v4.2.15
- Conclusion: don't install laravel/framework v4.2.14
- Conclusion: don't install laravel/framework v4.2.13
- Conclusion: don't install laravel/framework v4.2.12
- Conclusion: don't install laravel/framework v4.2.11
- Conclusion: don't install laravel/framework v4.2.10
- Conclusion: don't install laravel/framework v4.2.9
- Conclusion: don't install laravel/framework v4.2.8
- Conclusion: don't install laravel/framework v4.2.7
- Conclusion: don't install laravel/framework v4.2.6
- Conclusion: don't install laravel/framework v4.2.5
- Conclusion: don't install laravel/framework v4.2.4
- Conclusion: don't install laravel/framework v4.2.3
- Conclusion: don't install laravel/framework v4.2.2
- Installation request for prologue/alerts dev-master -> satisfiable by prologue/alerts[dev-master].
- Conclusion: don't install laravel/framework v4.2.1
- Conclusion: don't install laravel/framework v4.2.0
- prologue/alerts dev-master requires illuminate/session ~5 -> satisfiable by laravel/framework[5.0.x-dev], illuminate/session[5.0.x-dev, 5.1.x-dev, v5.0.0, v5.0.22, v5.0.25, v5.0.26, v5.0.28, v5.0.4].
- Can only install one of: laravel/framework[v4.2.0-BETA1, 5.0.x-dev].
- don't install illuminate/session 5.0.x-dev|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session 5.1.x-dev|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.0|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.22|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.25|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.26|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.28|don't install laravel/framework v4.2.0-BETA1
- don't install illuminate/session v5.0.4|don't install laravel/framework v4.2.0-BETA1
- Installation request for laravel/framework 4.2.* -> satisfiable by laravel/framework[4.2.x-dev, v4.2.0, v4.2.0-BETA1, v4.2.1, v4.2.10, v4.2.11, v4.2.12, v4.2.13, v4.2.14, v4.2.15, v4.2.16, v4.2.17, v4.2.2, v4.2.3, v4.2.4, v4.2.5, v4.2.6, v4.2.7, v4.2.8, v4.2.9].
我无法删除 prologue/alerts 插件。我只想恢复我的项目,我有旧的提交/备份文件。但是作曲家不让我这么做。
此外,尝试从 composer.json 中删除 prologue/alerts,并从 app.php 中删除其他属性,但 composer 仍然没有帮助我。
错误是"Class 'Prologue\Alerts\AlertsServiceProvider' not found",这意味着作曲家试图安装较新版本的prologue/alerts ?
提前致谢。
嗯,你可以看看prologuephp/alerts releases的榜单。如果您查看从 v0.3.0 到 0.4.0-beta.1 的 composer.json
,您会看到依赖项更改自:
"illuminate/config": "~4",
"illuminate/session": "~4",
"illuminate/support": "~4",
收件人:
"illuminate/config": "~5",
"illuminate/session": "~5",
"illuminate/support": "~5"
因此,如果您的项目正在使用 Laravel 4,您只需要使用正确的版本即可。在您的 composer.json
中,使用 "prologue/alerts": "0.3.0"
.
"prologue/alerts": "dev-master",
您的一般问题是您使用的是分支而不是版本。分支有两个主要问题:
- 它们不指向一次提交的独特代码,而是一个不断更新的移动目标。
- 它们本质上具有开发稳定性,当用作项目中的顶级依赖项时,这可能是一个可以接受的风险,但如果在必须包含在其他地方的包中使用,则会产生问题。
@milz 的回答指向了正确的方向,但您应该完全遵循:对于您使用的每个包,将对分支的每个引用替换为发布版本或版本范围。
mews/captcha - 已发布版本 1.0.1、2.0.0 和 2.0.1 - 只有 1.0.1 与 Laravel 4 兼容。您可能希望使用 1.0.*
来捕获错误修复,即使它们不太可能发生。
prologue/alerts - 发布版本 0.1.0、0.1.1、0.2.0、0.3.0 和 0.4.0。版本 0.1 和 0.2 需要 Laravel 4.0,0.3.0 允许任何 4.x,0.4.0 跳转到任何 Laravel 5.0 版本。选择 0.3.*
.
yangqi/htmldom - 没有发布版本。尽管很难:只要维护者不标记发布版本,您就应该避免使用这个包。它也没有正确说明它的依赖关系——它依赖于服务提供商的 Laravel。要求维护者标记发布,或切换到不同的包。这个包裹很可能会重复你现在正在经历的痛苦。
scalia/sphinxsearch - 版本 0.1、0.1.1 和 0.2 都与 Laravel 4 兼容 - 选择 0.2.*
.
请注意,对于所有版本,您可能还会考虑不仅接受错误修复,还考虑兼容更新。这会将版本要求从 x.y.*
更改为 ~x.y
。我会推荐这个。
另请注意,根据您使用的主分支版本,通过切换到标记版本,您可能会返回一些提交。这可能会恢复提交给 master 但从未标记为发布的错误修复。如果您发现您正在使用的软件包有未发布的错误修复,您也应该要求维护者发布这些错误修复。
根据他们的反应速度和对您请求的解决,您可能会决定继续使用该软件包,或者切换到其他软件包。
这是我到目前为止所做的:
- 已从 composer.json 文件中删除 "prologue/alerts":"dev-master",
- 在 app/config/app.php 中,从供应商和
'Alert' 中删除
'Prologue\Alerts\AlertsServiceProvider' => 'Prologue\Alerts\Facades\Alert' , 来自别名 - "composer update" 来自控制台。
这可能不是很好的解决方案,但我设法在没有不受支持的插件的情况下恢复了我的项目。