composer.json 配置必须精准:require 与 require-dev 分离运行时与开发依赖,psr-4 自动加载需严格匹配命名空间与目录结构(如 “App\\”: “src/”),scripts 命令应使用 vendor/bin 下可执行文件,composer.lock 是协作必需的依赖快照。
composer.json 不是“写对就行”的配置文件,它直接决定依赖能否正确安装、自动加载是否生效、包能否被他人复用——错一个字段名或缩进层级,composer install 就可能静默失败或加载不到类。
require 和 require-dev 怎么分?别把测试工具打进生产包
这两个字段控制依赖的安装范围,但很多人误以为只是“开发用/不用”,实际影响的是 composer install --no-dev 的行为(线上部署常用)。
-
require:运行时必需的依赖,比如"monolog/monolog": "^2.8"—— 没它,你的日志功能就崩 -
require-dev:仅本地开发或测试需要的,比如"phpunit/phpunit": "^10.5"或"friendsofphp/php-cs-fixer": "^3.14" - 如果把
phpunit写进require,上线执行composer install --no-dev会跳过它,但你的autoload-dev可能还引用了它,导致Class not found - 版本号建议用
^(如"^8.1"),避免锁定死版本;慎用*或dev-main,CI 构建可能因分支变动而失败
autoload 字段怎么写才让 new App\Http\Controller\Home() 找得到?
自动加载不是“声明了就自动生效”,它取决于命名空间路径映射是否与物理目录结构严格一致。