Composer国内安装Yii2卡顿主因是packagist.org解析慢、fxp-asset插件低效及PHP版本限制,应切阿里云镜像、禁用fxp插件改用asset-packagist.cn、加--ignore-platform-reqs参数并务必执行php init。

Composer 默认走国外源,国内直连基本卡死
不是你的网差,是 packagist.org 在国内 DNS 解析慢、连接不稳定,尤其下载 yiisoft/yii2-app-advanced 这种带大量依赖的模板时,composer create-project 常卡在 “Resolving dependencies” 或 clone yii2 子包阶段。
实操建议直接切全局镜像,一行命令搞定:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 阿里云镜像稳定、全量同步,比老版本的
pkg.phpcomposer.com更可靠(后者已停更) - 不推荐只改项目级
repositories,因为create-project阶段还没进项目目录,项目配置还读不到 - 执行后可用
composer config -g -l确认repo.packagist已生效
fxp-asset 插件是 Yii2 安装慢的元凶之一
旧版 Yii2 依赖 fxp/composer-asset-plugin 下载 Bower/NPM 包,它会全局安装 Node.js、触发大量临时进程,composer install 时间动辄翻 3–5 倍,且容易因权限或版本冲突失败。
正确做法是禁用它,改用 asset-packagist ——纯 Composer 方式拉取前端资源,不依赖 Node.js:
"config": {
"process-timeout": 1800,
"fxp-asset": { "enabled": false }
},
"repositories": [
{ "type": "composer", "url": "https://asset-packagist.cn" }
]
-
asset-packagist.cn是中文站,比国际站asset-packagist.org更快更稳 - 必须删掉
replace里对bower-asset/*的声明,否则 Composer 会跳过安装 - 别忘了在
frontend/config/main.php和backend/config/main.php里加别名:'@bower' => '@vendor/bower-asset',否则AssetBundle找不到 JS/CSS
PHP 版本不匹配导致 create-project 直接退出
运行 composer create-project yiisoft/yii2-app-advanced 时,如果本地 PHP 是 7.3 或更低,会立刻报错:Your requirements could not be resolved,根本不会走到下载环节——因为 yii2-app-advanced 的 composer.json 明确要求 php: >=7.4。
解决方法不是升级 PHP(可能影响其他项目),而是让 Composer 忽略平台检查:
composer create-project --prefer-dist --no-scripts --ignore-platform-reqs yiisoft/yii2-app-advanced advanced-project
-
--prefer-dist强制走 ZIP 包,比 Git clone 快且不依赖 SSH/Git 配置 -
--no-scripts跳过自动执行init,避免因缺少php.ini扩展(如 intl)而中断 - 之后再进目录手动跑
php init --env=Development --overwrite=All,可控性更高
init 脚本没跑,访问就 500 或白屏
很多人以为 create-project 结束就完事了,但 Yii2 高级版的 init 脚本才是关键:它生成 common/config/main-local.php、设置 cookieValidationKey、复制环境配置。漏掉这步,frontend/web/index.php 会直接 500,登录页空白,后台进不去。
务必执行:
cd advanced-project<br>php init --env=Development --overwrite=All
-
--env=Development开启调试模式,--overwrite=All防止残留旧配置干扰 - 检查
frontend/config/main-local.php里'cookieValidationKey'是否非空,为空就手动填个随机字符串,比如'cookieValidationKey' => 'abc123xyz' - Web 服务器 DocumentRoot 必须指向
frontend/web/,不是项目根目录;Nginx/Apache 都要配好重写规则,否则首页 404
最常被忽略的是 init 和路径别名这两步,不是安装失败,是“装完了但跑不起来”。









