composer本地包需在主项目composer.json的repositories中配置type为path的源,路径须相对且本地包含合法composer.json;require时用dev-main等分支名,启用symlink选项并执行composer update包名才能实时生效。

本地开发扩展包不是“装上就能用”,关键在于让 Composer 把你的源码目录当成真实包来解析和链接——否则改完代码还得反复 composer update,甚至根本加载不到类。
为什么 composer require vendor/name:dev-main 总报 “Could not find package”
根本不是网络或缓存问题,是 Composer 根本没“看见”你的本地目录。它只从主项目 composer.json 的 repositories 数组里找源,require 字段只声明“我要谁”,不负责“去哪找”。
-
repositories必须写在主项目(即你正在开发的那个项目的)composer.json根级,不能写在本地包自己的composer.json里 -
url必须是相对路径(如"../my-package"),绝对路径在 Windows 上极易静默失败(盘符、空格、反斜杠都会中断) - 本地包目录下必须有合法的
composer.json,且其中name字段(如"acme/utils")要和require里写的完全一致(大小写敏感) - 版本约束必须用
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 还是旧文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在主项目
composer.json的repositories条目里加"options": {"symlink": true} - 执行
composer update acme/utils(不是install,也不是dump-autoload)才会重建 symlink - 验证是否成功:
ls -la vendor/acme/utils应显示-> ../my-package;Windows 用户用dir vendorcmeutils看是否为“快捷方式”类型 - Windows 需开启开发者模式或以管理员权限运行命令行,否则 symlink 创建会失败且无提示
本地包的 composer.json 必须补全哪些字段
光有 name 和 autoload 不够,Laravel 或其他框架可能无法自动发现服务提供者或正确加载类。
-
"type": "library"(通用)或"type": "laravel-package"(Laravel 专用,启用自动发现) -
"autoload": {"psr-4": {"Acme\Utils\": "src/"}}—— 命名空间与目录严格对应 -
"require": {"php": "^8.1"}—— 明确 PHP 版本底线,避免 CI 失败 -
"extra": {"laravel": {"providers": ["Acme\Utils\UtilsServiceProvider"]}}—— Laravel 下显式注册 provider(若不用自动发现)
最容易被忽略的一点:path 仓库不触发自动发现机制的“重扫描”。哪怕你改了 extra.laravel.providers,主项目也不会重新读取——必须删掉 vendor/acme/utils 目录再跑一次 composer update acme/utils,symlink 才会重建并载入新配置。










