composer install 用于根据 composer.lock 还原依赖,而 composer download 并不存在;想获取原始源码应使用 composer create-project --no-install --prefer-source 或手动 git clone 源仓库。

composer install 和 composer download 的本质区别
Composer 本身不提供“下载源码包”这个独立命令,composer install 是还原依赖的默认行为,composer download 根本不存在。你真正想做的,是绕过自动安装流程,拿到某个包未编译、未安装的原始代码(比如用于阅读、调试或 patch)。
关键在于:Composer 默认只保留 vendor/ 下的运行时文件,删掉 composer.lock 或改配置都解决不了“怎么拿到原始仓库代码”这个问题。
用 composer create-project 获取干净源码(推荐)
这是最接近“下载源码包”的可靠方式,适用于你想查看某个包的完整 Git 仓库结构(含测试、文档、脚本等),而不是仅 vendor 里的生产代码。
-
composer create-project --no-install --no-scripts vendor/package-name ./target-dir:跳过自动安装和脚本执行,只克隆源码 - 加
--prefer-source强制从 Git 克隆而非 dist 包(有些包 dist 不含 .git 或 tests) - 如果目标包没设
source类型(即没有 Git 地址),该方法会失败——此时只能手动去 Packagist 查源码地址 - 注意:
--no-install不影响源码下载,它只跳过 autoload 生成和依赖安装
直接从 Packagist 查源码地址再 git clone
当 create-project 失败,或你需要特定分支/commit 时,这是唯一可控的方式。
- 打开 Packagist 页面,找
Source链接(通常是 GitHub/GitLab) - 确认
composer.json里source字段是否真实有效(有些包填的是空或过期地址) - 执行
git clone https://github.com/vendor/repo.git,然后cd repo && git checkout v1.2.3(版本号查composer show vendor/package-name) - 别依赖
dist链接:它通常指向 zip 包,不含 .git,且可能被 CDN 缓存导致内容滞后
为什么 vendor 里的代码不是“原始源码”
vendor/ 是 Composer 构建出的运行时产物,不是原始仓库快照。
- 如果包声明了
"type": "library"且有dist,Composer 默认下 zip 包(删掉了 .git、tests、.github 等非运行必需文件) - 即使用了
--prefer-source,也只保留 .git,但 post-install-cmd 脚本可能已自动清理或生成文件(如编译 TypeScript) -
autoload规则会影响实际加载路径,但和源码结构无关;别指望vendor/里能找到原始src/和tests/的完整对应关系
真要审计或打补丁,别省那一步:去源头 clone,别在 vendor 里翻。尤其注意有些包的 source 地址写在 composer.json 的 repositories 里,不在 Packagist 主页显示。










