composer只认composer_*开头的环境变量;composer_home须设为绝对英文路径且不含~、$home等符号,设错或含特殊字符将退回到默认路径;path需手动添加$composer_home/vendor/bin,且必须新开终端生效。

Composer 不认 APP_ENV、NODE_ENV 这类项目变量,只认 COMPOSER_* 开头的环境变量;设错 COMPOSER_HOME 或漏配 PATH,会导致 global 命令静默失效、laravel/tp-cli 找不到、缓存不命中——而且完全不报错。
COMPOSER_HOME 怎么设才不被覆盖又生效
这个变量决定全局配置、插件、vendor/bin 的根目录。一旦路径含中文、~、$HOME、%USERPROFILE%,Composer 就会退回到默认路径(如 %APPDATA%\Composer 或 $HOME/.composer),你设的值等于白写。
- Linux/macOS 正确写法:
export COMPOSER_HOME="/home/yourname/.my-composer"(不能用~/my-composer) - Windows 正确写法:
setx COMPOSER_HOME "C:\Users\YourName\AppData\Roaming\Composer"(必须用英文路径,不能写C:\用户\) - 设完必须新开终端——
source ~/.zshrc不够,子进程不继承父 shell 的环境 - 验证方式:
composer config --list --global,看 “Global configuration file” 行是否匹配你设的路径
PATH 为什么加了还是 command not found
Composer 从不自动把 $COMPOSER_HOME/vendor/bin 加进系统 PATH。它只负责把 laravel、think 这类可执行文件放进该目录,剩下的全靠你自己配。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:在
~/.zshrc末尾加export PATH="$COMPOSER_HOME/vendor/bin:$PATH"(顺序很重要,放前面防系统同名命令覆盖) - Windows:把
%COMPOSER_HOME%\vendor\bin加进「系统属性 → 高级 → 环境变量 → 用户变量 → Path」(不是%APPDATA%\Composer\vendor\bin,除非你根本没设COMPOSER_HOME) - 加完必须新开终端,再运行
echo $PATH或echo %PATH%确认路径存在 - 最后用
which laravel(macOS/Linux)或where think(Windows)确认指向的是vendor/bin下的文件
COMPOSER_CACHE_DIR 和缓存失效问题
这个变量控制下载包、解压、installer 缓存的位置。它不只影响首次安装速度,更关键的是决定 composer update 能否跳过重复下载——设错会导致每次都是从零开始。
- 可独立于
COMPOSER_HOME设置,比如指向 SSD 分区:export COMPOSER_CACHE_DIR="/mnt/ssd/composer-cache" - 如果设为不可写路径,会出现
Failed to create cache directory: Permission denied,此时 Composer 会退回到内存缓存(极慢)或跳过缓存 - Docker 构建中常见错误:把
COMPOSER_CACHE_DIR指向/tmp/composer-cache,构建完即销毁,下次仍是冷启动 - CI 场景推荐挂载持久化缓存目录,并确保运行用户有写权限
HTTP_PROXY 和平台校验怎么避免线上翻车
代理和平台检查是线上部署最容易漏掉的两个点:一个导致 composer install 卡住或 403,另一个让 --no-dev 也装不上包。
- 设代理必须同时设
HTTP_PROXY和HTTPS_PROXY,否则 HTTPS 请求仍直连,容易 SSL 错误或超时 - 企业代理常拦截
packagist.org请求,建议用NO_PROXY排除私有仓库域名 - 线上没
ext-xdebug,但require-dev里有依赖"ext-xdebug": "*"的包?--no-dev不管用,得加COMPOSER_PLATFORM_CHECK=0 - 生产命令应为:
COMPOSER_PLATFORM_CHECK=0 composer install --no-dev --optimize-autoloader --no-interaction
最麻烦的不是设错,而是设错后没有错误提示——composer global require 成功返回,laravel 却报 command not found;composer install 看似完成,autoload 却跳过 dev 包加载。所有这些问题都藏在路径和变量继承的缝隙里,而不是命令本身。










