为什么 COMPOSER_HOME 是空的?

Why is COMPOSER_HOME empty?

我有一个关于编程工具 composer 的问题,它作为可执行文件安装在 /usr/local/bin/composer 中,在我工作和家庭使用的 3 台不同机器上。根据:

composer help global
COMPOSER_HOME is c:\Users<user>\AppData\Roaming\Composer on Windows
and /home/<user>/.composer on unix systems.

Note: This path may vary depending on customizations to bin-dir in
composer.json or the environmental variable COMPOSER_BIN_DIR.

但是这两个都是空的:

echo $COMPOSER_HOME
echo $COMPOSER_BIN_DIR

当我运行:

composer global require <package>

它在我的 Ubuntu 16.04 桌面上只安装到 /home/<user>/.config/composer/vendor/bin ,但在其他任何地方它都正确安装到 /home/<user>/.composer/vendor/bin

为什么安装到 ~/.config 而不是 ~/.composer 并且不设置 COMPOSER_HOME 变量?

我注意到这一点是因为我获取了我的公共点文件,其中包括全局作曲家 bin 路径。我知道我可以通过在我的 bashrc 中手动设置 COMPOSER_HOME 来解决这个问题,但我宁愿首先理解为什么会发生这种情况。

source code 揭示了 Composer 主目录计算方式的一些额外复杂性。

如果您的系统使用 freedesktop.org 标准,它通过查找 environment variables beginning with XDG_ 来检测,那么 Composer 使用 $XDG_CONFIG_HOME/composer/,如果不是,则回退到 $HOME/.config/composer/设置。

您可能会对 special case 感兴趣:如果 $HOME/.composer/ 存在并且是一个目录,它将支持 freedesktop.org 逻辑。大概这是为了向后兼容。如果您手动创建此目录,Composer 应该会使用它。

我不确定为什么这只会影响您的 Ubuntu 16.04 机器。我的旧笔记本电脑 运行 Ubuntu 14.04 的变体使用 XDG_ 环境变量。

我怀疑您是在 freedesktop.org 逻辑 was added in July of 2015 之后在那台机器上第一次安装 Composer,并且您的其他机器在此之前都先安装了 Composer。然后他们现有的 ~/.composer/ 目录将确保 Composer 继续使用该位置。