根本原因是path未包含composer.bat路径或php调用错误;需将%programdata%\composersetup\bin加入系统path,确保composer.bat调用php.exe而非php-win.exe,并配置镜像源解决网络问题。

PowerShell 中输入 composer 报“不是内部或外部命令”
根本原因不是 PowerShell 本身限制,而是系统根本没找到 composer.bat 文件——它不在 PATH 里,或者安装时漏勾了“Add to PATH”。PowerShell 不像 Linux shell 那样默认读取用户级 bin 目录,它完全依赖 Windows 的系统/用户环境变量。
- 先运行
Get-Command composer,如果返回空,说明 PATH 没配对;如果报错“找不到该命令”,那大概率是 PATH 根本没加 - Composer 官方安装器默认把
composer.bat放在%PROGRAMDATA%\ComposerSetup\bin(注意是PROGRAMDATA,不是APPDATA),这个路径必须手动加进系统变量Path - 加完后务必关闭所有已打开的 PowerShell 窗口——重开一个,再试
composer --version;只刷新当前窗口的$env:Path是无效的 - 别用
.\composer或./composer调用:PowerShell 会优先找当前目录下的同名脚本,容易因权限、执行策略或路径错误失败
PowerShell 中运行 composer 却卡住、无响应、没报错
这八成是 composer.bat 调用了 php-win.exe 而非 php.exe。Windows 下 PHP 有两个可执行文件:php.exe(带控制台输出)和 php-win.exe(GUI 模式,静默吞掉所有 stdout/stderr)。Composer 必须用前者,否则命令看似运行了,实则黑屏卡死。
- 运行
where php,看输出是不是php-win.exe;如果是,说明 PHP 安装时选错了 PATH 条目 - 打开
%PROGRAMDATA%\ComposerSetup\bin\composer.bat,检查第一行是否为@php "%~dp0composer.phar" %*;再确认%~dp0对应目录下真有composer.phar - 临时验证:直接运行
php --version,如果有输出,再试php "%PROGRAMDATA%\ComposerSetup\bin\composer.phar" --version—— 如果这个能出版本号,就坐实是 bat 文件调用错了 PHP 可执行文件
需要强制走 IPv4 或绕过代理时,PowerShell 怎么设环境变量
Composer 本身不提供命令行开关来切网络协议或代理,但会读取 PHP 底层支持的环境变量,这是最轻量、最兼容的方式,且不影响其他工具。
- 强制 IPv4(解决 DNS 解析慢或双栈冲突):
$env:PHP_IPV4="1"; composer install - 走 HTTP 代理(企业内网常见):
$env:http_proxy="http://user:pass%40example.com:8080"; $env:https_proxy="http://user:pass%40example.com:8080"; composer update(注意密码里的@要 URL 编码成%40) - 想长期生效?别写进 PowerShell 配置文件——Composer 是全局工具,应设系统级环境变量;PowerShell 里临时设只用于调试或单次操作
为什么配好了 composer,composer require 还连不上 packagist.org
PATH 和 PHP 都正常,不代表网络通。国内直连 Packagist 基本不可用,超时或连接拒绝是常态,这不是 Composer 故障,而是源站访问策略+网络路由问题。
- 先运行
composer diagnose,重点看 “HTTP proxy support is enabled” 和 “The configured CA bundle is valid” 这两行;如果提示 “Connection could not be established”,基本就是源没换 - 立即切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 切完别忘了清缓存:
composer clear-cache,否则旧索引还在本地,仍可能尝试连原站 - 如果公司用透明代理或 SSL 拦截设备,
composer config -g github-protocols https可能有帮助;但更稳妥的是联系 IT 开放packagist.org和github.com的 443 端口
最容易被忽略的一点:composer.bat 文件本身是批处理,它不解析 PowerShell 的执行策略(ExecutionPolicy),所以别去改 Set-ExecutionPolicy——那解决不了任何 Composer 启动问题。真正卡住的地方,永远在 PATH、PHP 可执行文件路径、网络出口这三环里。










