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

就可以正常下载数据了。

分类: 常见报错