离线开发用 path 仓库可行但需满足三条件:本地目录含合法 composer.json、name 字段与 require 字符串严格一致(含大小写和 vendor)、路径为已提交 commit 的 Git 仓库;url 须为相对路径(Windows 需绝对路径),require 必加 @dev 分支标识,install 时应加 --no-plugins --no-scripts --no-autoloader。

离线开发用 path 仓库是可行的,但必须满足三个硬性条件:本地目录有合法 composer.json、name 字段与 require 完全一致、路径可移植且已初始化 Git。漏掉任意一条,composer require 或 install 都会静默失败或报 Could not find package。
本地包目录必须含合法 composer.json 且 name 严格匹配
Composer 不看文件夹名,只认 composer.json 里的 name 字段。这个值必须和你在项目中 require 时写的字符串一模一样,包括大小写和 vendor 名:
- 包目录下
composer.json写"name": "acme/utils",项目里就得写composer require acme/utils:dev-main - 如果写成
"name": "Acme/utils"或"acme-utils",即使路径完全正确,也会找不到包 -
version字段可省略,但require时必须用dev-main、dev-develop这类分支标识,不能写1.0.0
path 仓库的 url 必须是相对路径,且目标目录需有 Git commit
path 类型仓库不走 HTTP,而是直接读取本地文件系统,但它要求目标目录是 Git 仓库且至少有一个 commit——否则 Composer 拒绝识别,不报错也不提示,只是跳过该包。
- Linux/macOS:在项目根目录
composer.json中写"url": "./packages/my-utils" - Windows:必须带盘符,如
"url": "C:/projects/my-utils",不能用./开头 - 进包目录执行
git init && git add . && git commit -m "init",缺这步就无效
require 时必须加 @dev 分支标识,且不能混用 --no-plugins
path 包默认按开发模式加载,require 时不加分支名会被忽略;同时某些插件(如 phpstan/extension-installer)会在 install 阶段偷偷联网,必须禁用。
- 正确命令:
composer require acme/utils:@dev或composer require acme/utils:dev-main - 执行 install 时务必加
--no-plugins --no-scripts --no-autoloader,否则可能触发远程类探测或插件行为 - 别在生产环境保留
repositories块——CI 脚本建议用COMPOSER=composer.prod.json显式隔离
最容易被忽略的是 Git 初始化和 @dev 后缀:没 commit 的目录看起来一切正常,但 composer show 查不到包;漏掉 @dev 则 require 成功却实际没装进 vendor,后续 autoload 失败才暴露问题。


















