ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 PHP Composer 从 Laravel 中删除一个包?

使用 PHP Composer 从 Laravel 中删除包的正确方法是什么?

到目前为止,我已经尝试过:

从文件 composer.json 中删除声明(在“require”部分中)从文件 app.php 中删除任何类别名从我的代码中删除对包的任何引用 :-) 运行 composer update 运行 composer dump-autoload

这些选项都不起作用!我错过了什么?


s
steadweb

作曲家 1.x 和 2.x

运行以下命令将从供应商(或安装包的任何位置)、composer.json 和 composer.lock 中删除包。适当地更改供应商/包。

composer remove vendor/package

显然,您需要在您的应用程序中删除对该包的引用。

我目前正在运行以下版本的 Composer:

Composer version 1.0-dev (7b13507dd4d3b93578af7d83fbf8be0ca686f4b5) 2014-12-11 21:52:29

文档

https://getcomposer.org/doc/03-cli.md#remove

更新

2020 年 10 月 26 日 - 更新的 assert 命令答案适用于 Composer 的 v1.x 和 v2.x


@ZeshanKhattak composer update 将更新所有依赖项。它使项目处于不稳定状态。不要使用 composer update 除非你想更新依赖
composer remove packagename ,它更新从 composer.json 中删除包并从供应商中删除包文件夹... laravel - 5.4.24,composer - 1.4.2。
运行 composer remove <package> 后,composer 似乎会自动安装缺少的软件包。无论如何要避免这种情况?使用版本 1.7.2。
它应该是:composer remove package_name 代替:composer remove vendor/package 不需要供应商,因为 laravel 会自动在供应商目录中检查包。
如果您不希望在删除模块后更新您的软件包,您可以运行 composer install 而不是 composer update
P
Peter Mortensen

我让它工作了......从 Laravel 中删除一个包的步骤是:

从文件 composer.json 中删除声明(在“require”部分) **从文件 config/app.php 中删除服务提供者(在“providers”数组中引用)从文件 config/app.php 中删除任何类别名删除任何从您的代码中对包的引用:-) 运行 composer update vendor/package-name。这将从供应商文件夹中删除包文件夹,并将重建 Composer 自动加载映射。手动删除已发布的文件(阅读 zwacky 的评论)

它将从 Vendor 文件夹中删除包文件夹。


尽管取消发布资产/配置并不是真正自动化的事情。我通常会手动删除 config/ 或 public/ 中的 vendor/package 文件夹。
现在 laravel 应该想出类似“remove package ”的东西来使它更容易。
这个解决方案的一个问题是它会更新所有其他包,这可能不是你想要的。
我认为 (1) 和 (5) 可以用运行 composer remove vendor/package 替换。
P
Peter Mortensen

通常像这样使用 composer remove 就足够了:

composer remove vendor/package

但是如果一个 Composer 包被删除并且“配置”缓存没有被清理,你就不能清理它。当你这样尝试时

php artisan config:clear

你会得到一个错误In ProviderRepository.php line 208:

找不到类“Laracasts\Flash\FlashServiceProvider”

这是一个死胡同,除非你去删除文件:

rm bootstrap/cache/config.php

这是我说的 Laravel 5.6,而不是某种非常古老的东西。

它通常发生在自动部署上,当您在旧缓存上复制新版本的文件时。即使您在复制之前清除了缓存。您最终会得到一个旧缓存和一个新的 composer.json 文件。


我认为它已在 5.7 中修复
在 5.6 中,我的引导程序/缓存是空的。我忘了我改变了缓存路径(config/cache.php)!删除新缓存文件夹中的文件解决了问题!
@YevgeniyAfanasyev 即使在 5.7 中也没有修复
我几乎花了 3 个小时把头发拉出来。我认为 config:clear 会解决这个问题。
P
Peter Mortensen

您只需在终端中键入以下命令即可删除任何软件包,只需删除您在安装软件包时提供的提供程序和别名(如果有的话)并更新作曲家,

composer remove vendor/your_package_name
composer update

有时要更新新的依赖项,您必须更新作曲家。我认为运行它没有害处。
P
Peter Mortensen

在从 composer.json 声明中删除包之前,请删除缓存:

php artisan cache:clear  
php artisan config:clear 

如果您忘记删除缓存并且收到“找不到类错误”,请重新安装软件包,清除缓存并再次删除。


P
Prashant Barve

您可以执行以下两种方法中的任何一种:

运行下面的命令(最推荐的方式来删除你的包而不更新你的其他包)包)$作曲家更新


P
Peter Mortensen

如果在完成前面答案中的所有步骤后仍然出现错误,请转到您的项目,Bootstrap → Cache → config.php。手动从缓存数组中删除提供者和别名条目。


这对我有帮助。
某些包供应商不满足创建包的所有要求。因此,这些供应商 composer remove vendor/package 无法正确删除缓存条目。所以,@Ramjith Ap 在这里是绝对正确的。
P
Peter Mortensen

利用:

composer remove vendor/package

这是一个例子:

安装或添加包

composer require firebear/importexportfree

卸载/删除

composer remove firebear/importexportfree

最后删除后:

php -f bin/magento setup:upgrade

php bin/magento setup:static-content:deploy –f

php bin/magento indexer:reindex

php -f bin/magento cache:clean

P
Peter Mortensen

要添加软件包,命令如下:

composer require spatie/laravel-permission

要删除软件包,命令如下:

composer remove spatie/laravel-permission

V
Vic Iyke

跑步

Composer remove package/name
Php artisan optimize

例如,“Composer remove mckenziearts/laravel-notify”在使用 Laravel 8 时对我有用。


D
DonJoe

如果给定的答案仍然不能帮助您删除它,请尝试以下操作:

从 composer.json 手动删除 require 中的行

运行作曲家更新


R
Ryan M

如果这不起作用“作曲家删除包/名称”,您仍然可以手动删除它。注意:包/名称就像 spatie 等。

去 composer.json 找到包名 从 composer.json 中删除包名 在你的 Laravel 项目中找到 vendor 文件。在您的终端上删除供应商运行 composer install 下的包文件

注意:包文件是指您正在寻找的包。例如,您想删除 Spatie。然后你需要在供应商文件中找到具有相似名称的,你需要手动删除它。您的包裹已成功移除。


那个“包文件”是什么?你是说composer.lock吗?您忘记添加删除锁定文件导致的后果,例如更新其他依赖项
例如,您有一个名为 spatie 的包。您将在供应商文件下找到它。作曲家.json。所有已安装的软件包都将在 Vendor 下以软件包的名称命名。
“删除 Spatie”是什么意思?那不是一个包裹。此外,composer remove 会自动执行所有这些操作
Spatie 是一个示例包名称。这是 Laravel 的权限管理包。我只是举个例子。 @NicoHaase 有时 composer remove 不起作用,我们需要手动删除它。这是解决这个问题的另一种方法。
请通过编辑为您的答案添加所有说明
P
Peter Mortensen

我们提供了一个很好的解决方案。这个解决方案实际上是在 Laravel 6 中完成的。如果你想从 Laravel 项目中删除任何包,那么你可以按照以下步骤轻松删除包:

第 1 步:您必须知道要删除的包名称。如果您不知道完整的包名称,则可以打开项目文件夹并转到 composer.json 文件并检查 require 数组中的名称:

"require": {
        "php": "^7.2",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "^6.2",
        "laravel/passport": "^8.3",
        "laravel/tinker": "^2.0"
    },

假设,在这里我要删除“fideloper/proxy”包。

第 2 步:使用您的项目根文件夹目录打开命令提示符

https://i.stack.imgur.com/uOwv2.jpg

步骤3:首先,通过以下命令清除所有缓存。一一运行命令。

php artisan cache:clear  
php artisan config:clear 

第 4 步:现在编写以下命令来删除包。在这里,您需要更改您的包名称,而不是我的示例包。

composer remove fideloper/proxy

现在,等待几秒钟,您的包被移除。


composer remove laravel/telescope --dev 如果它是开发包
P
Peter Mortensen

在 Laravel 8.* 上,以下步骤对我有用:

在终端上运行命令 composer remove package-name 从文件 Config/app.php 中删除提供程序和别名 从 Config 文件夹中删除相关文件。

从您使用它的代码中删除它。


我一直在尝试这个,但我不断收到一个错误:`在 ProviderRepository.php 第 208 行:找不到类 xxxxxx`
P
Peter Mortensen

从供应商文件夹中删除包文件夹(手动删除)从文件composer.json和'composer.lock'文件中删除它(使用Ctrl + F5搜索)从文件config/app.php和文件bootstrap/cache/config中删除它.php 文件 运行这些命令: composer remove **your-package-name** php artisan cache:clear php artisan config:clear


请永远不要建议任何人手动编辑 composer.lock。调用 composer remove 就足够了,因为这会将包从供应商文件夹和两个作曲家文件中删除
P
Peter Mortensen

这里有很多步骤:

转到文件 composer.json 并查找包以及它是如何编写的。

例如

{“要求”:{“树枝/树枝”:“^3.0”}}

我想删除 twig 3.0

现在打开 cmd 并运行 composer remove vendor/your_package_name 因为 composer remove twig/twig 将删除包。最后一步,运行 composer update。这肯定会给您带来无需安装或更新的信息,但如果您的软件包具有相互依赖关系,这一点很重要。


在使用已接受的答案和 15 个现有答案添加六岁问题的答案时,重要的是要指出您的答案所针对的问题的新方面。
我面临的最重要的事情是第 3 点,我们经常忽略它,因为我们通常会得到“无需安装或更新”,我在卸载某些发光组件时很不幸,因为我有使用发光胶囊的哨兵。不过值得庆幸的是,更新作曲家命令在这里有所帮助。上面的答案错过了相互依赖的部分,如果你觉得它不重要,直接回复我会删除我的答案。
如果您只想删除一个包,则不需要调用 composer update