直接换阿里云镜像并卸载fxp/composer-asset-plugin可解决90%的yii安装卡顿;需验证镜像配置是否生效(输出完整json)、禁用旧插件、替换asset源、清理cache与lock文件,并调高并发下载数。

直接换阿里云镜像 + 卸载 fxp/composer-asset-plugin,90% 的 Yii 安装卡顿当场消失。不是网络差,是默认走 packagist.org + 旧插件硬拉 Bower 包,两者叠加导致超时、反复重试、内存爆满。
确认镜像是否真生效,别被假输出骗了
执行 composer config -g repo.packagist,输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。常见失效情况:
-
repos.packagist(多一个s)→ 静默写入无效字段,命令不报错但没用 - URL 少了末尾
/→ Composer 2.2+ 会 404 后自动 fallback 到官方源,日志里根本看不到警告 - 项目根目录有
composer.json且含"repositories"字段 → 全局配置被完全覆盖 - 输出是空、
null或仍是https://packagist.org→ 配置压根没写进去
必须卸载 fxp/composer-asset-plugin,它已废弃多年
这个插件会启动 Node.js 进程、调用 Bower、反复请求 bower.io(国内基本不可达),是 Yii2 安装慢的主因。正确替代方案:
- 运行
composer global remove fxp/composer-asset-plugin - 在
composer.json的"config"下加:"fxp-asset": {"enabled": false} - 在
"repositories"里加:{"type": "composer", "url": "https://asset-packagist.cn"} - 删掉
"replace"中所有"bower-asset/*": "*"声明,否则 Composer 直接跳过安装 - 确保
frontend/config/main.php和backend/config/main.php中有:'@bower' => '@vendor/bower-asset'
安装时加参数绕过平台限制和下载卡点
即使镜像和插件都配好了,create-project 仍可能卡住。原因不是慢,而是某些检查或协议失败。常用组合参数:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--prefer-dist:强制下 ZIP 包,避开 Git clone 和 SSH 认证问题 -
--ignore-platform-reqs:绕过 PHP 版本限制(比如本地 PHP 7.3 装要求 ≥7.4 的yii2-app-advanced) -
--no-scripts:跳过post-install-cmd,避免因缺失php init或权限问题中断 -
--no-cache:临时禁用缓存,验证是否真走镜像(配合-vvv看日志域名)
例如:composer create-project --prefer-dist --ignore-platform-reqs --no-scripts yiisoft/yii2-app-advanced advanced
缓存和 lock 文件不清理,镜像等于白配
已有 composer.lock 的项目,首次用新镜像 install 会报 hash mismatch——因为旧 lock 记录的是国外源的包哈希,和镜像源返回的不一致。这不是镜像问题,是缓存污染:
- 先运行
composer clear-cache(不是cache-clear,后者已废弃) - 再删掉
vendor/和composer.lock - 最后重新
composer install -vvv,看日志里请求的域名是不是mirrors.aliyun.com
并发下载参数也得调:composer config -g http-max-concurrent-downloads 10,设太高(如 20)反而可能触发 file_put_contents(): failed to open stream 错误。










