不能,COMPOSER_REPO_PACKAGIST_URL环境变量对create-project无效,因其仅在install/update依赖解析阶段生效;create-project初始拉取skeleton时硬编码使用https://repo.packagist.org,必须用-r参数指定镜像源才生效。

create-project 能不能用 COMPOSER_REPO_PACKAGIST_URL?
不能。这个环境变量只在 composer install 和 composer update 的依赖解析阶段生效,create-project 启动时根本不读它——它先拉 skeleton 项目结构,再进目录执行 install,此时才读环境变量,但骨架包(比如 laravel/laravel)本身已从默认源下载完毕。
常见现象:设了 COMPOSER_REPO_PACKAGIST_URL=https://mirrors.aliyun.com/composer/,create-project 还是卡在 Downloading laravel/laravel,因为这一步走的是 Packagist 元数据查询 + ZIP 下载,不经过依赖解析器。
-
create-project只认-r参数或全局配置里的repo.packagist - 想让它走镜像,必须显式传
-r或提前配好全局源 - CI 中若用
create-project,别指望靠环境变量“顺带”切源,得单独处理
怎么让 create-project 临时走指定镜像(不改全局配置)
最直接有效的方式是用 -r 参数,它会覆盖所有其他配置,包括全局和项目级设置:
composer create-project laravel/laravel myapp -r https://mirrors.tencent.com/composer/
注意三点:
- URL 必须以
/结尾,否则请求路径错成https://mirrors.tencent.com/composer/packages.json→404 -
-r指定的是 Packagist 类型仓库地址,不是任意 URL;不能填https://gitlab.example.com/api/v4/...这类私有源路径 - 该参数只影响本次命令的 skeleton 下载和后续
install,不写入任何配置文件,干净无副作用
为什么 config -g repo.packagist 对 create-project 无效?
因为 create-project 在拉取 skeleton 时,会绕过 Composer 的常规仓库合并逻辑,直接构造 Packagist 请求 URL —— 它只检查 repositories.packagist.org(旧版)或 repo.packagist(新版)是否存在,但实际行为更底层:如果没显式传 -r,就硬编码用 https://repo.packagist.org。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
验证方式:
- 执行
composer config -g repo.packagist确认已设好 - 再跑
composer create-project laravel/laravel test --no-install -vvv - 观察日志里第一条 HTTP 请求,仍是
GET https://repo.packagist.org/p2/laravel/laravel.json
结论:全局配置对 create-project 的初始拉取无影响,必须用 -r 或换工具链(如先 git clone + 手动 composer install)。
CI/CD 中安全切换 create-project 镜像的实操建议
在 GitHub Actions 或 GitLab CI 里,不要依赖环境变量“自动生效”,而要显式控制:
- 用
if判断环境,动态拼-r值:composer create-project ... -r ${{ secrets.MIRROR_URL }} - 镜像 URL 提前校验:CI job 开头加
curl -sfI $MIRROR_URL | grep "200 OK",失败则 abort - 避免混用缓存:不同镜像源生成的
vendor不应共用 cache key,否则可能因元数据不一致导致安装失败 - 如果要用私有源(非 Packagist 类型),
create-project不支持,得改用git clone+composer install --no-plugins绕过
真正容易被忽略的点是:create-project 的“仓库”概念和 install 的“仓库”概念不是一回事——前者只管 skeleton 包下载路径,后者才走完整仓库发现与依赖解析流程。混淆这两层,就会反复踩坑。

















