Composer 通过 path 仓库类型让本地 PHP 包被识别和加载,需在 composer.json 的 repositories 中配置绝对或相对路径,本地包须有合法 name 和 version,执行 composer require 安装;require 字段不支持直接写路径,必须配 repositories;options 可控 symlink 行为;Windows 启用软链需管理员权限或开发者模式;本地包 autoload 配置必须正确。
Composer 安装本地扩展包,本质是让
能识别并加载你本地磁盘上的 PHP 包(比如还没发布到 Packagist 的私有组件、正在开发的 SDK、或需调试的第三方 fork)。关键不在“安装”,而在“怎么告诉 Composer:这个包就在这儿,别去远程拉”。
用
仓库类型指向本地目录
这是最常用也最稳妥的方式。Composer 不会复制文件,而是软链接(
)或硬拷贝(取决于
时选项),保证你改本地代码,项目里立刻生效。
在项目的
中添加
配置,类型设为
值必须是绝对路径或相对于
的相对路径(推荐用相对路径,避免换机器失效)
本地包自身的
必须有合法的
(如
)和
(可写
或
)
执行
即可安装——Composer 会自动匹配到你配的
仓库
仓库的
控制链接行为
默认 Composer 对
包使用符号链接(Linux/
mac
OS)或复制(Windows),但你可以显式控制:
→ 强制复制,适合 Windows 开发或 CI 环境
→ 显式启用软链(Linux/macOS 下默认就是 true)
加
可临时覆盖本地包
中的 version,方便测试分支
别直接用
指向本地路径(常见错误)
有人尝试这样写:
—— 这是错的。Composer 的
字段只接受
格式,不支持路径值。这么写会导致:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
报错:
即使本地有同名目录,Composer 也完全无视,仍去 Packagist 查找
唯一例外是
,但太绕,不如配
Windows 下软链接需要管理员权限或开发者模式
如果你在 Windows 上启用了
却看到
,不是 Composer 问题,是系统限制:
命令行需以“管理员身份运行”,或
开启 Windows 开发者模式(设置 → 更新与安全 → 针对开发人员 → 开发者模式)
若不想折腾,直接设
,Composer 会复制整个目录到
,只是改代码后要手动
真正容易被忽略的是:本地包的
配置是否正确。哪怕路径配对了,如果它的
里没写
,或者命名空间和实际目录结构不一致,
后依然会 Class not found。先跑通
再测试。
composer.jsonpathln -sinstallcomposer.jsonrepositoriespathurlcomposer.jsoncomposer.jsonname"myorg/utils"version"dev-main""1.0.x-dev"composer require myorg/utilspath
{
"repositories": [
{
"type": "path",
"url": "./packages/my-utils"
}
],
"require": {
"myorg/utils": "*"
}
}
pathoptionspath"options": {"symlink": false}"options": {"symlink": true}"options": {"versions": {"myorg/utils": "dev-feature-x"}}composer.jsonrequire"myorg/utils": "./packages/my-utils"requirevendor/name:versioncomposer installCould not find a matching version of package myorg/utilscomposer require vendor/name:dev-master --repository-url=file:///path/to/local/reporepositories"symlink": trueFailed to create symbolic link"symlink": falsevendor/composer update myorg/utilsautoloadcomposer.json"psr-4": {"MyOrg\": "src/"}requirecomposer dump-autoload -o