composer命令报“command not found”不是未安装,而是未加入path或缺少执行权限:需将composer.phar移至/usr/local/bin并chmod +x,再刷新shell缓存(hash -r或source ~/.bashrc),同时确认echo $path包含该路径。

为什么直接在 WSL 里运行 composer 命令会报 command not found
不是没装,是命令根本没进 $PATH,或者文件没加可执行权限。WSL 默认 PATH 包含 /usr/local/bin,但以下任一情况都会让它失效:
-
sudo mv composer.phar /usr/local/bin/composer没跟sudo chmod +x /usr/local/bin/composer—— 缺这步就是普通文件,shell 不认它可执行 - 刚装完没刷新 shell 缓存,
hash -r没跑,或没source ~/.bashrc(用 zsh 就该source ~/.zshrc) -
echo $PATH里压根没/usr/local/bin—— 可能被其他配置覆盖,临时补一句export PATH="/usr/local/bin:$PATH"就能验证
composer config -g repo.packagist 静默写入失败的四个硬条件
这条命令不报错 ≠ 生效。漏一个条件,就写进错误字段、查不到、回退官方源:
- 必须带
-g:否则只改当前目录下的composer.json,不是全局配置 - 键名严格是
repo.packagist(单数),repos.packagist(多 s)会写进无效字段,composer config -g repo.packagist输出为空 -
type值必须显式写composer,不能省略 ——composer config -g repo.packagist https://mirrors.aliyun.com/composer/缺 type,Composer 2.0+ 直接 fallback - URL 必须 HTTPS 且末尾带
/:少斜杠会导致请求拼成/composerpackages.json,404 且不提示
验证是否真写入:composer config -g repo.packagist 应输出完整 JSON 对象,例如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。
配了镜像但 composer install 还卡在 Loading composer repositories
不是镜像没设好,是它被绕过去了。真实原因就两个:
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
-
COMPOSER_IPV4=1没设:WSL2 下mirrors.aliyun.com可能解析到海外 IP,加这个环境变量强制走 IPv4 即可解决 - 项目级
repositories字段存在:只要composer.json里有"repositories"(哪怕值是空数组[]或{"packagist.org": false}),全局镜像立刻失效;删掉该字段,或显式设为"repositories": null
别信 config -g 输出,要看实际网络行为:composer update -vvv 2>&1 | grep mirrors.aliyun.com 有匹配行才说明真发到了镜像站。
跨平台开发时,composer.lock 和 config.platform 必须一起用
只传 composer.lock 不够,不同系统 PHP 版本、扩展差异会让 vendor 装不齐。关键点是:
-
composer.lock是唯一能保证依赖版本一致的依据,但它不约束平台能力 -
config.platform必须显式声明目标环境 PHP 版本和扩展,例如:composer config platform.php 8.1.0,再加composer config platform.ext-mbstring 1 - CI/CD 中禁用
composer config -g,改用COMPOSER_HOME=/tmp/composer composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,避免 HOME 路径不可控
项目路径别放 /mnt/c/ —— WSL2 的 9P 协议对小文件 I/O 延迟高、不支持硬链接,composer install 解压几百个包时慢 5–10 倍。真正要共享代码,用 git clone 到 ~/projects/,而不是靠 Windows 文件系统挂载。










