不使用 `composer update` 更新 Composer 自动加载文件?

58

我正在开发一个有很多依赖项的项目,这些依赖项都由我个人控制。每当某个要求中的命名空间映射发生更改时,我需要运行 composer update 命令来刷新 Composer 自动加载文件,以便能够获取命名空间映射。

但是,如果我直接在 vendor/ 目录中进行更改,则无需通过 composer update 命令检出最新版本 -- 我只需要刷新自动加载文件即可。对于托管在 GitHub 上的具有数十个要求的项目,composer update 可能需要几分钟的时间。

有没有办法让 composer 在不运行 composer update 命令的情况下刷新自动加载文件?

3个回答

92

composer install 和/或 composer dump-autoload 会完成相同的操作。 (dump-autoload文档)


3
这实际上并没有捕捉到 vendor/ 目录中的任何更改。例如,如果我在 vendor/*/*/composer.json 中更改自动加载器命名空间,这两个命令都无法检测到它。 - jevon
7
你不应该直接修改你的供应商目录。 - Evert
1
相反,您应该在依赖项的存储库中进行更改,然后仅更新该依赖项(composer update [packagename])。 - Evert
1
不要使用classmap自动加载器,而是使用PSR-4或PSR-0,并相应地提前计划。一个包通常应该负责在一个命名空间中添加类。这样,当在现有命名空间中添加新类时,您将永远不必更新自动加载器。 - Sven

10

你可以修改vendor/composer/installed.json文件,然后运行composer dump-autoload命令。


请进一步解释。这个工作原理与 Sven 的答案有何不同,后者已经超过五年了? - Nico Haase
3
当您需要更改vendor中的一些composer.json文件时,仅运行dump-autoload命令无法捕获这些更改。有时在部署之前需要进行本地调试,请在installed.json文件中查找更改的包,并手动使用所需更改更新autoload部分。 - Michael B.

0
我假设你正在使用PSR-0。如果是这样的话,你应该切换到PSR-4,因为它不需要在添加、删除或更改现有依赖类时重新构建自动加载器。
如果你添加了额外的顶级依赖,无论是手动添加还是使用require,你都需要运行composer update

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接