composer init后必须手动补全autoload和require,因默认生成的composer.json不含自动加载规则和php版本约束,需显式配置"autoload": {"psr-4": {"hoo\tool\": "src/"}}及"require": {"php": ">=8.0"}。

composer init 之后必须手动补全 autoload 和 require
很多人执行 composer init 后直接写代码,结果在项目里 require 进去却报 Class not found。根本原因是 composer init 生成的 composer.json 默认不带自动加载规则,也不会声明 PHP 版本约束。
你得立刻补上这两块:
-
"autoload": {"psr-4": {"Hoo\Tool\": "src/"} }—— 命名空间和目录映射必须显式写死,别信“默认” -
"require": {"php": ">=8.0"}—— 不加这个,别人用 PHP 7.4 安装时可能成功但运行时报错,且 Packagist 会拒绝收录 - 如果包要被 Laravel 自动发现,还得加
"type": "library"(非强制)或"type": "laravel-package"(Laravel 场景下推荐)
本地开发时别用 composer require 远程地址
你在 my-tool 目录改完一行代码,总不能每次都在测试项目里跑 composer update hoo/tool 吧?这根本没法调试。
正确做法是在测试项目的 composer.json 里加 path 仓库:
"repositories": [
{
"type": "path",
"url": "../my-tool"
}
]
然后执行:composer require hoo/tool:@dev(注意必须带 @dev,否则 Composer 可能忽略本地路径)
这样 Composer 会软链接 ../my-tool 到 vendor/hoo/tool,改源码即刻生效,dump-autoload 都不用手动触发。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
src 目录结构和命名空间必须严格对齐
PSR-4 不是“大概能加载”,而是路径和命名空间字符级匹配。比如你写了:
-
namespace HooTool;→ 就必须放在src/下,不能是src/Tool/或src/Hoo/Tool/ - 类文件名必须是
ResultTool.php,不是resulttool.php或ResultTool.class - 如果用了子命名空间如
HooToolConstants,对应目录就得是src/Constants/,不是src/constants/
Windows 下大小写不敏感容易掩盖问题,一到 Linux 服务器就报错 —— 这个坑几乎每个新包都踩一次。
发布前漏掉 minimum-stability 或 license 会导致 Packagist 拒收
Packagist 现在对元数据校验变严了。minimum-stability 必须是 stable、beta、alpha、dev 四者之一,填 rc 或空值都会失败;license 字段也不能留空或写 MIT License 这种非标准字符串,得是 MIT、Apache-2.0、GPL-3.0 等 SPDX ID。
提交前用这条命令快速检查:composer validate —— 它比 Packagist 的反馈更快更具体。
最常被忽略的是:没在 GitHub 仓库里打 tag。Packagist 只认 Git tag(如 v1.0.0),不是分支名也不是 commit hash。发版前记得 git tag v1.0.0 && git push --tags。










