必须用path类型仓库并在repositories中配置{"type":"path","url":"./packages/my-utils"},require写"myorg/utils":"@dev";本地包需有合法composer.json且name、version匹配,Windows需配"options":{"symlink":false}。

想让 Composer 直接加载你本地磁盘上的 PHP 代码,而不是去 Packagist 下载,核心就两条:必须用 path 类型仓库,且 require 字段里不能写路径——只写包名,版本加 @dev。
怎么在 composer.json 里配 path 仓库
这是最常用、最可控的方式。Composer 不复制代码,而是软链接(Linux/macOS)或硬拷贝(Windows),改本地源码,项目里立刻生效。
-
repositories数组里加一项,"type": "path","url"值必须是相对于项目根目录的相对路径(比如"./packages/my-utils"),绝对路径容易换机器失效 - 本地包目录里必须有合法的
composer.json,其中name(如"myorg/utils")和version(可写"dev-main"或"1.0.x-dev")字段不能空或错 - 如果本地包用 PSR-4 自动加载,
autoload配置必须指向正确子目录,否则composer dump-autoload后类还是找不到 - Windows 下默认不创建软链,要加
"options": {"symlink": false}强制复制,否则composer install可能静默失败
为什么 require 写了包名却报 “Could not find package”
常见错误是误以为 require 字段支持路径写法,比如 "myorg/utils": "./packages/my-utils" —— 这完全无效。Composer 的 require 只认 vendor/name:version 格式,路径值会被直接忽略。
- 必须靠
repositories提前声明“这个包我本地有”,再在require里写标准包名+版本约束 - 版本必须带
@dev,例如"myorg/utils": "@dev";写"*"或留空,Composer 默认找 stable 版本,而本地包通常没标 stable - 执行
composer require myorg/utils:@dev是最稳妥的安装方式,它会自动匹配到你配的path仓库
离线环境下为什么还会连外网
即使配了 path 仓库,composer install 仍可能触发 DNS 查询或访问 repo.packagist.org,根本原因是 Packagist 默认源没关干净。
- 必须运行
composer config --global repo.packagist false彻底禁用全局默认源 - 检查项目级配置:
composer config repo.packagist输出应为空;如果显示composer https://packagist.org,说明项目composer.json的repositories里还残留着 Packagist 条目,得删掉 - 加
-v参数运行composer install -v,看日志里是否还有Downloading https://repo.packagist.org/packages.json;有就说明某处配置漏了
真正麻烦的不是配错路径,而是 name 字段大小写不一致、version 没加 @dev、或者忘了关 Packagist——这些地方一错,Composer 就默默 fallback 到远程,连报错都不给,只能靠 -v 日志抓。


















