WSL中安装Composer应直接在终端执行官方curl脚本,确保PHP版本≥7.4、memory_limit≥2G且未禁用proc_open等函数,并严格区分Windows与WSL环境避免路径混用。

WSL 里装 Composer 就是普通 Linux 安装,别被“子系统”吓住
WSL(尤其是 WSL2)本质就是个轻量级 Ubuntu/Debian 环境,composer 安装方式和真机 Ubuntu 完全一致,不需要额外适配或特殊命令。很多人卡在第一步,是因为误以为要从 Windows 下“跨系统安装”,其实只要进到 WSL 终端里操作就行。
- 先确认你用的是 WSL2(运行
wsl -l -v查看),推荐 Ubuntu 22.04+,避免 PHP 版本太老 - 确保已安装 PHP CLI:
php -v能输出版本(最低要求 PHP 7.4,建议 8.1+) - 别用 Windows 的
choco或scoop在宿主机装 Composer——它不会自动出现在 WSL 的$PATH里 - 最稳的安装方式是官方推荐的
curl+php方式,不是apt install composer(Ubuntu 源里的版本太旧,常报Package manifest version mismatch)
用 curl 装全局可用的 composer,不是临时用一下
官方安装脚本会把 composer.phar 放进 /usr/local/bin/composer,这样所有用户、所有终端都能直接敲 composer,不用加 php composer.phar 前缀。
- 执行这三行(复制粘贴即可):
curl -sS https://getcomposer.org/installer | php<br>sudo mv composer.phar /usr/local/bin/composer<br>sudo chmod +x /usr/local/bin/composer
- 验证是否生效:
composer --version—— 如果报command not found,大概率是上一步没加sudo或路径写错了 - 别跳过
chmod +x:WSL 默认挂载的 ext4 分区支持可执行位,但漏掉这步会导致权限拒绝 - 如果提示
cURL error 60,说明 CA 证书没更新,运行sudo apt update && sudo apt install -y ca-certificates再重试
PHP 配置不对,composer 一跑就报错
Composer 不是独立程序,它重度依赖 PHP 的配置项,尤其 memory_limit 和 disable_functions。WSL 默认 PHP 配置往往不够用,composer install 卡死或报 Allowed memory size exhausted 是最常见现象。
- 查当前生效的 php.ini:
php --ini(注意不是phpinfo(),那个是 Web 模式下的) - 改
memory_limit:编辑输出的那个Loaded Configuration File路径下的文件,把memory_limit = 128M改成memory_limit = 2G(Composer 5.x 推荐至少 1.5G) - 检查
disable_functions:必须确保没禁用proc_open、exec、shell_exec,否则composer create-project会静默失败 - 改完重启终端或运行
hash -r清 shell 命令缓存,再试composer diagnose看是否还有警告
Windows 和 WSL 的路径混用,vendor 里全是空文件夹
这是新手最容易栽的坑:在 Windows 文件资源管理器里打开 WSL 的 /home/xxx/project 目录(比如通过 \wsl$Ubuntuhomexxxproject),然后用 Windows 的 IDE(如 PhpStorm、VS Code 没开 Remote-WSL)执行 composer install —— 此时实际调用的是 Windows 的 PHP 和 Composer,根本没走 WSL 环境。
- 结果就是
vendor/生成了,但里面全是空目录或损坏的 symlink(Windows 不认 Linux 的软链) - 正确做法:所有
composer命令必须在 WSL 终端里执行;IDE 要用 Remote-WSL 扩展连接到 WSL 实例 - 检查当前环境是否“干净”:
which php应该返回/usr/bin/php,which composer应该返回/usr/local/bin/composer;如果返回/mnt/c/...开头的路径,说明你在 Windows 环境下误操作了 - 已经搞坏的
vendor,别试图修复,直接删掉rm -rf vendor composer.lock,回到 WSL 终端重来
WSL 的关键边界很清晰:终端进的是哪边,PHP 和 Composer 就是哪边的。跨边操作不报错,但结果不可靠——这点比报错还麻烦。










