0.背景
模仿yii2官网使用下面的指令
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
然后项目卡在这个地方,超时之后开始报下面的错误:
curl error 28 while downloading https://asset-packagist.org/p/provider-latest/xxx.json: Timeout was reached
1.原因及解决办法
问题的原因就是composer.json中有一段代码:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
它表示我们要去https://asset-packagist.org 下载数据,但是,我们在国内由于一些大家都懂的原因,所以这一步基本过不去,
然后找替代方法。
第一步:
我们停掉程序,打开composer.json文件。找到下面的代码:
"require": {
"php": ">=5.6.0",
"yiisoft/yii2": "~2.0.14",
"yiisoft/yii2-bootstrap4": "~2.0.0",
"yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0"
},
然后,增加两行:
"require": {
"php": ">=5.6.0",
"yiisoft/yii2": "~2.0.14",
"yiisoft/yii2-bootstrap4": "~2.0.0",
"yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0",
"bower-asset/bootstrap": "^3.3",
"npm-asset/jquery": "^2.2"
},
注:经过实际测试,第一步不会影响项目构建以及运行,但是官方推荐这么做,所以也就照做了。
第二步,第二步比较重要,经过三次测试才确定
一开始我以为是composer源的问题,于是我写了下面这篇文章来记录一下并实际操作了换源的过程:composer太慢,怎么换源 – 每天进步一点点 (longkui.site)
但是,经过多次测试后发现,构建过程中跟源的关系不大(当然,因为墙的原因,还是建议大家换源),问题的根源在于本身composer.json中。
首先,我们按照官方的建议,在composer.json中找到如下代码:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
按照官方的建议是在下面新增一条数据,从别的地方拉取数据,看了一些文章也是这么说的,第一个仓库找不到数据就从第二个找,于是改成了下面这样
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
},
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
然后我们cd 到 basic 目录 执行
composer update -vvv
注: -vvv 指令是查看指令执行的详细过程,然后发现它还是卡在去请求https://asset-packagist.org 这个地方,如下图:
还是不行的话,索性直接放弃掉第一个仓库,改下下面这样:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.cn"
}
]
然后执行
composer update -vvv
或者
composer update
就可以正常下载数据了。