使用composer安装laravel包而不更新依赖项[重复]

Posted

技术标签:

【中文标题】使用composer安装laravel包而不更新依赖项[重复]【英文标题】:installing a laravel package using composer without updating dependencies [duplicate] 【发布时间】:2020-10-31 04:03:02 【问题描述】:

我想在 laravel 5.8 中安装 zizaco/entrust 包,在他们的 github 页面中据说在 composer.json 文件中包含 "zizaco/entrust": "5.2.x-dev" 并运行 composer更新 命令。我按照下面的方法运行了 composer update 命令。

"require" : 
        "php" : "^7.1.3",
        "fideloper/proxy" : "^4.0",
        "laravel/framework" : "5.8.*",
        "laravel/tinker" : "^1.0",
        "laravel/ui" : "^1.2",
        "maatwebsite/excel" : "^3.1",
        "zizaco/entrust" : "5.2.x-dev"
    ,

但是 composer update 命令在安装 zizaco/entrust 包时将所有包更新到最新版本(这些包我包含在上面的“require”字段中)。如果最新更新的软件包中存在一些编码错误,那么整个站点可能会崩溃。仅供参考,在我运行上述命令后,我看到本地 git 显示供应商文件夹下文件夹中许多文件的更改,这意味着包中有一些更新,对吗?所以建议运行 composer install 命令,这样那些依赖包就不会更新到最新版本了。

所以,在我的情况下,如上所述,在 composer.json 的 require 字段中包含 "zizaco/entrust": "5.2.x-dev" 后,如果我运行 composer install 那么它不会安装 zizaco/委托包。此外,如果我运行 composer require zizaco/entrust 5.2.x-dev,它仍然会安装最新版本的依赖包。

那么我如何防止安装我包含在 composer.json 文件的“require”字段中的最新版本的依赖包,而我只安装 zizaco/entrust 包。

这样我的 laravel 5.8 站点就不会因为故障代码或最新版本中的任何内容而因将任何软件包更新到最新版本而中断。处理这种情况非常重要,因为我们需要在 laravel 站点安装包以满足各种需求。

【问题讨论】:

我不会使用这个包,它已经被放弃了。我会改用spatie/permission。 谢谢,但我的问题是关于更新依赖项 运行 composer require spatie/laravel-permission 应该只安装软件包而不是更新现有的。 【参考方案1】:

您有两个选择:使用composer require 指定要安装的包,或手动更新您的composer.json 文件并使用composer update [package]

Composer Require

composer require zizaco/entrust:5.2.x-dev

这将自动更新您的composer.json 文件并安装指定的版本。这不会更新您的任何其他依赖项。虽然文档指定包和版本应该用冒号分隔(:),但我用空格对其进行了测试,它似乎可以工作。

Composer Update [package]

composer update zizaco/entrust

如果您手动更新了composer.json 文件,则需要运行composer update 并指定要更新的包。如果您指定要更新的包,则只有该包会受到影响。当您不指定要更新的包时,composer 将查找所有包的更新。

关于Composer Install的说明

composer install 在这里帮不了你。如果您已经有一个composer.lock 文件(因为您只是试图添加一个新包,所以您将拥有该文件),composer install 将只查看您的composer.lock 文件并尝试安装其中定义的所有内容。这意味着,如果您手动更新 composer.json 文件并运行 composer install,它不会安装您指定的新要求。

只有当您还没有 composer.lock 文件时,composer install 才会尝试解析依赖项并安装它们。

【讨论】:

【参考方案2】:

第 1 步: 您只需将package 添加到composer.json 文件并运行命令:

composer install

composer install 将检查新包并安装它,此外它还将检查其他包中的任何弃用。

第 2 步:

你可以直接在 composer 中运行你的命令

composer require package/name

例如,如果我需要install firebase,请从项目根目录运行以下命令:

composer require firebase/php-jwt

从终端安装新包会自动将其添加到composer.json 文件中,并且不会更新以前安装的包。

希望这会有所帮助!

【讨论】:

【参考方案3】:

改为运行composer install。或者,您可以使用composer require <package name>

Composer install 在您的 composer.lock 中查找 exact 版本,并且仅在 composer.json 中查找丢失的包。

Composer update 将在 composer.json 中查找 版本约束,大​​致意思是“a range of versions”。这就是安装不同版本的原因。

【讨论】:

以上是关于使用composer安装laravel包而不更新依赖项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

快速安装laravel框架的IDE提示工具

使用yum来下载RPM包而不进行安装

安装 Laravel 遇到问题?你需要更新 composer.json 文件

升级包而不使用 pip 升级依赖项?

yum 下载RPM包而不进行安装

Laravel 5.2 - 使用 composer 和 git bash 安装 laravel 时出错