如何使用composer从Laravel删除软件包?


402

从Laravel 4中删除软件包的正确方法是什么?很久以来我一直在尝试:

  1. 从中删除声明composer.json(在“要求”部分中)
  2. 从中删除所有类别别名 app.php
  3. 从我的代码中删除对该程序包的所有引用:-)
  4. composer update
  5. composer dump-autoload

不工作!我想念什么吗?

一些软件包通过“ artisan config:publish ...”发布其配置。有没有办法“取消发布”它们?

Answers:


594

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

composer remove vendor/package

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

我当前正在运行以下版本的composer:

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

13
然后运行composer update以从供应商中删除供应商/软件包文件夹
Zeshan 2016年

11
@ZeshanKhattak作曲家更新将更新所有依赖项。这样会使项目处于不稳定状态。除非您想更新依赖项,否则不要使用composer update
zarax

11
composer remove packagename,它会更新从composer.json删除软件包并从供应商删除软件包文件夹... laravel-5.4.24,composer-1.4.2。

看来composer在运行后会自动安装缺少的软件包composer remove <package>。无论如何要避免这种情况?使用1.7.2版。
OlleHärstedt'18

它应该是:composer remove package_name相反:composer remove vendor / package不需要供应商,因为laravel自动在供应商目录中检查软件包。
令人沮丧的

171

正常工作...从Laravel删除软件包的步骤是:

  1. 从composer.json中删除声明(在“ require”部分中)
  2. 从“ app / config / app.php”中删除服务提供者(“ providers”数组中的引用)
  3. 从“ app / config / app.php”中删除所有类别名
  4. 从您的代码中删除对该程序包的所有引用:-)
  5. 运行“ composer更新供应商/程序包名称”。这将从“ vendor”文件夹中删除包文件夹,并重新构建作曲家自动加载图。
  6. 手动删除已发布的文件(阅读zwacky的评论)

它将从“供应商”文件夹中删除软件包文件夹


2
尽管取消发布资产/配置并不是真正的自动化。我通常会手动删除config /或public /中的vendor / package文件夹。
zwacky 2014年

7
现在,laravel应该提出类似“删除软件包<package-name>”的内容,以使其变得更容易。
Chandan Gupta 2014年

19
该解决方案的一个问题是它将更新所有其他软件包,而这可能不是您想要的。
tremby

3
composer remove vendor/package我认为(1)和(5)可以替换为running 。
JCarlosR

谢谢您,此说明对于删除无法正常使用的Igaster / laravel-theme包非常有用
Jjsg08

59

运行以下命令

composer remove Vendor/Package Name

就这样。无需作曲家更新。供应商/软件包名称只是之前安装的目录


1
我这样做,它说,它不再需要composer.json所以“忽略”
甜寒冷的费城

1
composer remove <packageName>我认为这是删除任何软件包的理想选择。忘了Vendor:)例如,composer remove laravel/tinker
Shamsul Huda

43

通常这样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。


2
我认为它是固定在5.7
叶夫根尼·阿法纳西耶夫

1
使用5.6,我的引导程序/缓存为空。我忘记了更改缓存路径(config / cache.php)!删除新缓存文件夹中的文件可解决此问题!
Aine

2
@YevgeniyAfanasyev即使在5.7版中也
无法解决

2
我几乎花了3个小时来拔毛。我以为config:clear会解决这个问题。
Shreyansh Panchal,

34

您可以仅通过在终端中输入follwing命令来删除任何软件包,并且只需删除您在安装软件包时提供的提供程序和别名(如果有)并更新作曲家,

composer remove vendor/your_package_name
composer update

1
有时要更新新的依赖关系,您必须更新作曲家。我认为运行该命令没有任何危害。
Shahrukh Anwar

18

您可以执行以下两种方法之一:

  1. 运行以下命令(推荐的删除软件包而不更新其他软件包的方法)

    $ composer remove vendor/package

  2. 转到您的composer.json文件,然后运行以下命令,它将删除您的程序包(但也会更新您的其他程序包)

    $ composer update


17

从composer.json声明中删除软件包之前,请先删除缓存

php artisan cache:clear  
php artisan config:clear 

如果您忘记删除缓存,却收到找不到类的错误,请重新安装该软件包并清除缓存,然后再次删除。


16

最简便的方法

句法:

composer remove <package>

例:

composer remove laravel/tinker

15

完成上述所有步骤后,如果仍然出现错误,请转到项目bootstrap->cache->config.php,手动从缓存阵列中删除提供者和别名条目。


这对我有帮助。
彼得·格里芬

1
某些软件包供应商不满足创建软件包的所有要求。因此,这些供应商composer remove vendor/package无法正确删除缓存条目。因此,@ Ramjith Ap在这里绝对正确。
Samrat Khan

12

**

使用“ composer删除供应商/软件包”

** 这是示例: 安装/添加软件包

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

9

使用composer命令删除软件包

composer remove <package>

使用composer命令安装软件包

composer require <package>

安装composer.json中提到的所有软件包

composer install

更新软件包

composer update

我将这些用于Laravel项目


9

您可以通过在终端中键入以下命令来删除任何软件包,只需删除在安装软件包时提供的提供程序和别名并更新作曲家

composer remove <package_name>
composer update

8

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

  • 手动删除线requirecomposer.json

  • composer update


3

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

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

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

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

第2步:使用项目根文件夹目录打开命令提示符。 第3步:首先,通过以下命令清除所有缓存。一一运行命令。在此处输入图片说明

php artisan cache:clear  
php artisan config:clear 

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

composer remove fideloper/proxy

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


2
或者,composer remove laravel/telescope --dev如果它是开发包
vinsa,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.