为什么COMPOSER_HOME为空?

Jef*_*ett 3 php bash composer-php ubuntu-16.04

我有一个关于编程工具的问题作曲家安装为一个可执行文件中/usr/local/bin/composer对我的工作和家庭之间使用3吨不同的机器.根据:

composer help global
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)

但这两个都是空的:

echo $COMPOSER_HOME
echo $COMPOSER_BIN_DIR
Run Code Online (Sandbox Code Playgroud)

当我跑:

composer global require <package>
Run Code Online (Sandbox Code Playgroud)

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

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

我注意到这一点是因为我提供了包含全局作曲家bin路径的常见dotfiles.我知道我可以通过手动设置COMPOSER_HOME我的bashrc 来解决这个问题,但我宁愿理解为什么会发生这种情况.

Chr*_*ris 8

源代码中发现一些额外的复杂性作曲家的主目录是如何计算的.

如果你的系统使用freedesktop.org标准,它通过查找以开头的环境变量XDG_来检测,那么Composer会使用$XDG_CONFIG_HOME/composer/,$HOME/.config/composer/如果没有设置则回退.

您可能有兴趣看到有一个特殊情况:如果$HOME/.composer/存在并且是一个目录,它将用于支持freedesktop.org逻辑.据推测,这是为了向后兼容.如果手动创建此目录,Composer应该使用它.

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

我怀疑你在2015年7月添加了freedesktop.org逻辑之后第一次在该机器上安装了Composer,并且在此之前你的其他机器都安装了Composer.然后他们现有的~/.composer/目录将确保Composer继续使用该位置.

  • 感谢您的输入,我提交了 [拉取请求](https://github.com/composer/composer/pull/5575) 和更新的文档。 (2认同)