首页 > 解决方案 > 在 Composer 中创建项目时如何使用全局 composer.json?

问题描述

我添加了以下配置,如果我需要全局包,一切正常。每个包都会从 mirrors.aliyun.com 安装

composer global config repo.packagist composer https://mirrors.aliyun.com/composer/

和内容来自~/.composer/composer.json

{
    "require": {
        "laravel/installer": "^4.0",
        "laravel/valet": "^2.11"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer/"
        }
    }
}

但是如果我用这样的作曲家创建项目,我发现从https://repo.packagist.org/packages.json下载包

composer create-project --prefer-dist laravel/laravel sample.com -vvv

我需要从镜像下载,但是全局composer.json中的配置被忽略了,有人知道这是为什么吗?

这是一些相关的日志

Reading /Users/jack/.composer/composer.json
Loading config file /Users/jack/.composer/config.json
Loading config file /Users/jack/.composer/auth.json
Loading config file /Users/jack/.composer/composer.json
Loading config file /Users/jack/.composer/auth.json
Reading /Users/jack/.composer/auth.json
Reading /Users/jack/.composer/vendor/composer/installed.json
Creating a "laravel/laravel" project at "./sample.com"
Downloading https://repo.packagist.org/packages.json

更新@ 19:55

我添加--repository参数,然后laravel/laravel从镜像存储库下载模板

composer create-project laravel/laravel sample.com --prefer-dist --repository=https://mirrors.aliyun.com/composer/ -vvv

但是下载后laravel/laravel,还是从Packagist下载,这里有一些相关日志

Reading /Users/cuimingda/.composer/composer.json
Loading config file /Users/cuimingda/.composer/config.json
Loading config file /Users/cuimingda/.composer/auth.json
Loading config file /Users/cuimingda/.composer/composer.json
Loading config file /Users/cuimingda/.composer/auth.json
Reading /Users/cuimingda/.composer/auth.json
Reading /Users/cuimingda/.composer/vendor/composer/installed.json
Creating a "laravel/laravel" project at "./api.mingda.net"
Downloading https://mirrors.aliyun.com/composer/packages.json
Installing laravel/laravel (v7.25.0)

Created project in /Users/cuimingda/Sites/api.mingda.net
Reading ./composer.json
Reading /Users/cuimingda/.composer/composer.json
Loading config file /Users/cuimingda/.composer/config.json
Loading config file /Users/cuimingda/.composer/auth.json
Loading config file /Users/cuimingda/.composer/composer.json
Loading config file /Users/cuimingda/.composer/auth.json
Reading /Users/cuimingda/.composer/auth.json
Reading /Users/cuimingda/.composer/vendor/composer/installed.json
> post-root-package-install: @php -r "file_exists('.env') || copy('.env.example', '.env');"
Executing command (CWD): '/usr/local/Cellar/php/7.4.8/bin/php' -d allow_url_fopen='1' -d disable_functions='' -d memory_limit='1536M' -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Downloading https://repo.packagist.org/packages.json

标签: composer-php

解决方案


我自己找到了答案。

请勿使用以下方法设置镜像,因为它们会修改~/.composer/composer.json,并且composer.json在创建项目时不起作用

composer global config repo.packagist composer https://mirrors.aliyun.com/composer/

正确的方式 - 手动将以下代码放入~/.composer/config.json,无论是否composer global requirecomposer create-project它们都会从镜像站点获取文件,而不是从 packagist.org

{
    "config": {},
    "repositories": [
        {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer/"
        },
        {
            "packagist": false
        }
    ]
}

无需添加任何与 configto 相关的存储库~/.composer/composer.json

{
    "require": {
        "laravel/installer": "^4.0",
        "laravel/valet": "^2.11"
    }
}

推荐阅读