必须严格遵循composer三重校验链:主项目composer.json顶层repositories声明、本地包composer.json的name/version/options定义、运行时符号链接建立;任一缺失将导致静默失败或回退复制模式。

不能靠“试出来”,必须按 Composer 的三重校验链走:主项目 composer.json 的 repositories 声明、本地包目录下 composer.json 的 name 与 version 定义、运行时是否真建立了符号链接。漏掉任一环,composer require 都会静默失败或 fallback 到复制模式。
repositories 必须写在项目根 composer.json 最外层
Composer 只读取项目根目录下 composer.json 文件最顶层的 repositories 字段——它和 require、autoload 并列,不能嵌套进任何其他字段里。
- 错误写法:
"require": { "acme/utils": "dev-main", "repositories": [...] }—— 这个repositories被完全忽略 - 错误写法:
"extra": { "repositories": [...] }—— extra 不参与仓库发现 - 正确位置:和
require同级,直接放在 JSON 根对象下 - 验证方式:执行
composer config repositories,能看到你配的条目才说明被识别
url 必须是相对路径且指向含 composer.json 的目录
url 字段只接受以 ./ 或 ../ 开头的相对路径,且该路径必须是一个**存在合法 composer.json 文件的目录**,不是文件本身,也不能以 / 结尾。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 错误写法:
"url": "my-pkg"(缺./前缀)、"url": "/home/user/pkg"(绝对路径)、"url": "../my-pkg/"(末尾斜杠) - 正确写法:
"url": "./packages/utils"或"url": "../shared/logger" - Windows 下也一样用正斜杠,不用
C:\或双反斜杠 - 路径中避免中文、空格;若必须,先用
printf %q转义再写入配置
本地包 composer.json 必须有 name + version + symlink 选项
本地包自身的 composer.json 不只是元数据,它参与运行时解析和 symlink 决策。缺 name 或 version,Composer 就不认这个包;没 options,Windows 和 Docker 下大概率 fallback 到复制。
-
name必须和require中写的**逐字一致**:大小写、短横线-、斜杠/全部敏感("acme/utils"≠"Acme/Utils") -
version推荐写"dev-main",不要留空;若用分支名,确保 Git 分支真实存在并已 commit -
options必须写在**本地包自己的composer.json里**:"options": {"symlink": true}—— 主项目的配置无效 - 本地包目录需已执行
git init && git add . && git commit -m "init",否则 symlink 创建失败且无提示
require 时必须显式指定版本,且不能用语义化约束符
path 类型仓库不走 Packagist 的版本解析流程,所有 ^、~、= 都被忽略。它只认 * 或 dev-main 这类分支别名,实际加载版本由本地包 composer.json 中的 version 字段决定。
- 推荐写法:
"acme/utils": "*"或"acme/utils": "dev-main" - 无效写法:
"acme/utils": "^1.2.0"、"acme/utils": "1.2.3"、"acme/utils": "@stable" - 改完本地代码后,必须运行
composer update acme/utils才能刷新 symlink;install不重建已有链接 - 验证 symlink 是否生效:
ls -la vendor/acme/utils(Linux/macOS)或dir vendor\acme\utils(Windows),看到->或JUNCTION才算对
最容易被忽略的是 symlink 的生效条件:它依赖本地包自身 composer.json 里的 options,而不是主项目配置;且 Windows 必须管理员权限、Docker 必须加 --cap-add=SYS_ADMIN,否则连失败提示都没有,只有静默 fallback。










