先建空目录再执行 composer init,避免在现有项目根目录直接初始化;需填 vendor/name 格式包名、设 type 字段、配 psr-4 autoload(如 "acmeutils": "src/"),并配合 path repository 与 symlink 实现本地热更新。

先建目录再 composer init,别在项目里直接 init
直接在 Laravel 或 Yii 项目根目录下跑 composer init 是最常见错误——生成的 composer.json 缺少 type、autoload 等关键字段,后续类根本不会被自动加载。正确做法是:单独建一个空目录(比如 my-utils),cd 进去再执行 composer init。
填包名时必须带 vendor 名,例如 acme/my-utils,不能只写 my-utils;最低稳定性选 dev;autoload 类型推荐 psr-4,命名空间填 AcmeUtils,路径填 src/(确保你同步建好 src/ 目录)。
- 如果跳过
git init和首次commit,Composer 在 path 模式下会直接忽略该目录 -
type字段建议手动补上,比如"type": "library"或"type": "laravel-package",某些框架(如 Laravel)靠它识别是否启用服务提供者 - 不要依赖
composer init自动生成的require,扩展包应尽量减少运行时依赖,开发依赖可写进require-dev
本地开发必须配 path repository,且三要素对齐
主项目(比如你的 Laravel 应用)的 composer.json 的 repositories 数组里,必须显式声明 path 源,格式为:[{"type": "path", "url": "./packages/my-utils"}]。注意:不是写在本地包自己的 composer.json 里,也不是塞进 require 或 config 字段。
“能装上”取决于三个硬性条件同时满足:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 主项目
repositories中的url必须精确指向本地包根目录(不能多或少一级) - 本地包
composer.json中的name(如"acme/my-utils")必须与主项目require中写的完全一致(大小写敏感) - 本地包
composer.json中的version必须是分支名(如"dev-main"),且主项目require也得写"acme/my-utils": "dev-main"——"*"或"^1.0"在 path 源下无效
改代码不生效?大概率是没启 symlink 或没 update
默认情况下 Composer 对 path 包走的是复制(copy)模式,改本地 src/ 里的文件,vendor/acme/my-utils/src/ 里完全不变。要热更新,必须启用符号链接:
- 在
repositories条目中加"options": {"symlink": true} - Linux/macOS 通常默认支持;Windows 必须开启“开发者模式”或以管理员权限运行命令行,否则静默失败
-
composer install不会刷新已有 symlink,必须运行composer update acme/my-utils - 验证是否成功:
ls -la vendor/acme/my-utils应显示-> ../packages/my-utils(Linux/macOS);Windows 下用dir vendorcmemy-utils查看是否为“快捷方式”类型
autoload 写错,装上了也用不了
90% 的 Class not found 错误和安装无关,而是 autoload 配置失效。本地包自己的 composer.json 必须有正确的 autoload 块,例如:
{"autoload": {"psr-4": {"Acme\Utils\": "src/"}}
改完命名空间或新增类后,必须在**主项目根目录**运行 composer dump-autoload(开发阶段不用加 -o)。如果包提供 Laravel Service Provider,还得手动在 config/app.php 的 providers 数组里注册——Composer 不处理这个。
CI 环境尤其容易翻车:缓存挂载点必须是本地 SSD(不能是 NFS 或 Docker volume),composer install 必须带 --no-dev --prefer-dist,否则 symlink 会被跳过。










