三步通:配 repositories、写对name和dev-main、执行composer update vendor/name;composer install不刷新链接,改本地代码无效是常见坑。

直接说结论:不用教程,只要三步就通——配 repositories、写对 name 和 dev-main、执行 composer update vendor/name;composer install 不会刷新链接,改了本地代码也不生效,这是最常踩的坑。
怎么配 repositories 才让 Composer “看见”本地包
必须在项目根目录的 composer.json 里写,不是本地包自己的文件,也不是 require 字段里塞路径。
-
repositories是数组,哪怕只加一个也要写成[{ "type": "path", "url": "../my-package" }] -
url必须是相对路径(推荐),如"../packages/utils";绝对路径在 Windows 上大概率静默失败 -
url指向的是**目录**,不是composer.json文件本身 - 该目录下必须有合法的
composer.json,且含name(如"acme/utils")和version(哪怕写"dev-main") - 如果用通配符(如
"../packages/*"),每个匹配子目录都得有独立的composer.json
为什么 require 之后还是报 “Could not find package”
根本不是网络或缓存问题,而是 Composer 根本没“看到”你的本地目录。它只按 repositories 声明去查,不扫描硬盘、不猜路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
require字段只能写"vendor/name": "dev-main",不能写"vendor/name": "./local/path"——后者语法非法,直接报错 - 本地包的
name必须和require里写的**完全一致**(大小写敏感、vendor 名不能少) - 版本必须用
dev-main、dev-develop这类分支名,不能写"1.0.0"或"*";path 源下version字段被忽略,只认 Git HEAD 所在分支 - 本地包目录需已运行过
git init并至少有一个 commit,否则 Composer 拒绝加载
改了本地代码,为什么主项目里不生效
因为默认行为是复制(copy),不是链接(symlink)。你改的是 ../my-package/src/Helper.php,但 vendor/acme/utils/src/Helper.php 还是旧文件。
- 启用符号链接:在
repositories条目里加"options": {"symlink": true},或者在本地包自己的composer.json里加同样字段 -
composer install不重建已有链接,只补缺;必须运行composer update acme/utils(指定包名)才会重新解析 path 并刷新 symlink - 验证是否成功:
ls -la vendor/acme/utils应显示-> ../my-package;Windows 用户用dir vendor\acme\utils看是否为“快捷方式”类型 - Windows 需开启开发者模式或以管理员权限运行命令行,否则
symlink创建失败且无提示
CI/CD 和上线前必须注意的事
path 仓库是开发期特供机制,上线环境没有 ../my-package 这个路径,链接必然断裂,构建必挂。
- 上线前务必从
composer.json的repositories数组中移除所有"type": "path"条目 - CI 脚本里不要依赖
composer install自动拉取本地包;应改用正式发布的版本 + 远程仓库 - 团队协作时避免硬编码路径(如
"../packages/my-lib"),可用环境变量或 CI 变量动态切换,但composer.json中仍需保留配置占位 - 别用
"type": "package"替代"type": "path"——前者不支持 autoload、scripts、autoload-dev 等完整功能,调试时会掉链子

















