高效热更新需确保 symlink 真实生效、本地包含合法 composer.json(name 与 require 严格一致)、repositories 正确配置在主项目根级,且 git 已初始化;否则改代码无反应却无报错。

能直接 symlink 热更新、改代码不重装、require 不用反复改,才算高效;否则就是徒增配置负担。
本地包的 composer.json 必须合法且 name 对齐
Composer 不会报错跳过非法或不匹配的本地包,而是静默忽略——这是“Could not find package”最常见原因。
- 本地包根目录下必须存在
composer.json,且至少包含"name"字段(如"acme/utils"),值要和主项目require中写的完全一致(大小写敏感) -
"version"字段非必需,但若省略,主项目需设"minimum-stability": "dev",否则"dev-main"这类分支名会被稳定性策略过滤掉 - 如果本地包没初始化 Git,可手动加
"version": "dev-main",否则 Composer 无法推断分支版本 - 别把
repositories写进本地包自己的composer.json——它只影响自身安装,主项目根本看不到
主项目 composer.json 的 repositories 要写对位置和格式
配置写错位置或格式,Composer 就当它不存在,连 warning 都不给。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须写在主项目根目录
composer.json的根级"repositories"数组里,不能嵌套在require或其他字段中 -
"type"必须是"path",不是"package"或"vcs" -
"url"必须是相对于主项目composer.json的路径,如"../acme-utils"或"./packages/my-pkg";~/、$HOME/、file://、绝对路径均无效 - 整个
repositories是数组,哪怕只配一个,也要写成[{ "type": "path", "url": "./packages/my-pkg" }]
确保 symlink 生效,否则改代码不生效
默认启用 symlink,但 Windows 和权限受限环境极易 fallback 到 copy 模式,且不提示。
- 验证是否真用了链接:
ls -l vendor/acme/utils(macOS/Linux)或dir vendor\acme\utils(Windows),看到->或<symlinkd></symlinkd>才对 - Windows 下需以管理员身份运行终端,或开启“开发者模式”,否则无法创建符号链接
- 检查主项目
composer.json是否有"config": {"symlinks": false}—— 显式关闭会强制复制 - 本地包目录若被 OneDrive、WSL 跨文件系统挂载或 NTFS 权限限制,Composer 可能静默退回到 copy 模式
- 本地包必须已执行
git init && git add . && git commit -m "init",否则 Composer 拒绝 symlink
多包联调时用全局 repositories 省事
同时调试 acme/utils、acme/api-client、acme/logger 时,每个项目重复写 repositories 很累。
- 用 Composer 全局配置一次:
composer config -g repositories.acme-path '{"type":"path","url":"~/dev/acme/*"}' -
url支持*通配符,自动匹配~/dev/acme/下所有含合法composer.json的子目录 - 全局配置后,各项目只需
require包名,无需再声明repositories - 注意:全局配置不解决 symlink 权限问题,Windows 下仍需管理员权限或开发者模式
真正卡住的点往往不在配置本身,而在 symlink 是否真实建立、Git 初始化是否完成、路径是否被 OneDrive 同步锁定——这些地方一出问题,现象都是“改了代码没反应”,但错误信息为零。










