Php composer能否在不下载软件包的情况下生成“composer.lock”?

Php composer能否在不下载软件包的情况下生成“composer.lock”?,php,composer-php,Php,Composer Php,它确实存在一个从composer.json生成composer.lock的命令 类似ruby的bundler:$bundle lock如果您没有composer.lock 答案是“否”,您必须使用以下方法生成锁文件: composer install 不使用composer.lock安装 如果您从未运行过该命令 之前,并且也不存在composer.lock文件 只需解析composer.json文件中列出的所有依赖项 将其文件的最新版本下载到供应商目录中 在你的项目中 资料来源: NB潜在问题

它确实存在一个从
composer.json
生成
composer.lock
的命令

类似ruby的
bundler
$bundle lock

如果您没有
composer.lock
答案是“否”,您必须使用以下方法生成锁文件:

composer install
不使用composer.lock安装

如果您从未运行过该命令 之前,并且也不存在composer.lock文件 只需解析composer.json文件中列出的所有依赖项 将其文件的最新版本下载到供应商目录中 在你的项目中

资料来源:

NB潜在问题:没有锁文件生成器将使用最新版本的依赖项

如果您已经有了一个
composer.lock
如果您已经有一个
composer.lock
,并且composer抱怨它不同步,您将看到以下警告:

警告:锁文件不是composer.json中最新更改的最新版本。您可能会得到过时的依赖项。运行update来更新它们

要解决此问题,可以更新锁文件本身,而无需更新依赖项。这将仅更新锁定文件中的
内容哈希值

composer update --lock
从作曲家手册:

--lock仅更新锁文件哈希以抑制有关锁的警告 文件已过期


作曲家v2变化 在v1中,运行
composer update
将更新锁文件并进行安装,没有只写入锁文件的选项。Composer v2已将两者分开,因此
Composer update
将更新锁文件,但不下载任何内容

注意:
composer update
在v2中当然会创建一个更新的composer.lock,因此如果您未能保存以前的composer.lock文件,仍然无法重新创建该状态,您仍然有问题


该功能包含在v2.0版本中,请参见此处:

我不知道。这似乎是一个奇怪的要求。我认为
编写器更新--lock
可以做到这一点。“--lock:只更新锁文件哈希,以抑制关于锁文件过期的警告。”或者@Sevvlor我起初没有安装deps,运行
update--lock
it安装它们。我实际上认为,如果不安装或更新,这是不可能的。我真的认为这会很有用。在我的场景中,我需要在6个应用程序中更新依赖项的版本。由于此功能不可用,我必须签出每个应用程序并安装所有依赖项(70000个文件),以便更新锁文件。跳过70000个文件的复制会很好。因此,我可以创建一个虚拟的
composer.lock
文件,然后
composer更新--lock
以获得与
composer install
相同的锁文件吗?从我看到的情况来看,生成composer.lock的唯一方法是运行composer install。如果锁文件丢失,如果
--dry run
或类似的标志写入锁文件,那就太好了。直接在composer repo-@mvorisek中为它创建了一个问题如果我能给你荣誉或赏金,我会的,你的建议将包含在composer 2.0中!只需注意
composer update--lock
还将更新锁文件的其他部分,以匹配
composer.json
而不仅仅是散列。