我们目前正在将项目迁移到symfony2。该网站使用多个域:
domain.com
-主网站help.domain.com
-常见问题profile.domain.com
-用于用户CP
等等
为了让它发挥作用,我的想法是创建目录"sites",并为每个子域创建自己的目录,其中有框架文件+供应商目录,带有指向根供应商/*中目录的符号链接(除composer和autoload.php文件外的每个目录)。所以结构看起来像这样:
root/
sites/
domain.com/
app/
src/
web/
vendor/
symlinks for each library to root vendor
composer.json
composer.lock
profile.domain.com/
app/
src/
web/
vendor/
symlinks for each library to root vendor
composer.json
composer.lock
vendor/
我需要这样做,因为每个域的自动加载都有点不同(我们将域之间共享的代码存储在供应商/公司中,而每个域唯一的代码则存储在域目录的/src文件夹中)。
问题是,现在我必须在每个目录上执行"composer install
",它会创建自己的composer.lock
,如果我稍后在任何目录上更新,库都会更新,但composer.lock
文件不会同步,所以每次都会重新安装。
有更好的方法来解决这个问题吗?(我想把composer只放在根目录中,但我没有找到为每个域转储不同的autoload.php文件的方法)。
您要么有一个具有单个依赖项集的项目,要么有两个具有独立dep的项目。介于两者之间的任何事情都没有意义。似乎你想选择第一个选项,但又担心自动加载性能。
问题是,默认情况下,自动加载无论如何都会很慢。因此,即使您有两个单独的自动加载文件,其中只包括特定子项目的dep,它可能仍然很慢。
你真正应该做的是转储一个类映射,它基本上是一个自动加载文件,将所有类名映射到它们所在的文件。这可以减少stat调用,因此非常有效。在两个子项目中加载整个类映射也不应该给您带来太多开销,尤其是如果您启用了APC。
您可以使用以下命令转储类映射文件:
$ composer dump-autoload --optimize
现在,您应该可以获得更高的自动加载性能。
TLDR:使用单个composer.json
并自动加载类映射,速度很快