我有一个关于编程工具composer的问题,它在/usr/local/bin/composer
中作为可执行文件安装在我在工作和家庭之间使用的3台不同的机器上。根据:
composer help global
COMPOSER_HOME is c:Users<user>AppDataRoamingComposer 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
变量?
我之所以注意到这一点,是因为我的公共点文件包括全局composer bin路径。我知道我可以通过在bashrc中手动设置COMPOSER_HOME
来解决这个问题,但我更愿意首先理解为什么会发生这种情况。
源代码揭示了Composer主目录计算的一些额外复杂性。
如果您的系统使用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继续使用该位置。