改name字段仅影响Packagist显示、依赖解析和PSR-4命名空间推导,不会自动更新目录名、Git地址、类文件命名空间及所有引用;需同步修改autoload前缀、vendor依赖、本地仓库路径、测试/静态分析配置等,并清缓存重装。

composer.json 里改 name 字段就行,但改完不等于项目就“重命名”了
改 name 是最直接的操作,但这个字段只影响 Packagist 显示、依赖解析和 autoload 命名空间推导(如果用了 PSR-4 自动映射),它不会自动改目录名、Git 远程地址、类文件里的命名空间,也不会帮你重写所有引用。
常见错误现象:composer install 后报 Class not found,或 composer update 提示包冲突,其实是因为 name 和实际 autoload 配置/命名空间不匹配。
- 打开
composer.json,修改"name"的值,格式必须是vendor/name(如"myorg/my-new-project"),不能只有"my-new-project" - 如果项目被其他包 require,对方的
composer.json里也要同步更新依赖项中的name - 如果用了
"psr-4"自动加载,检查"autoload": {"psr-4": {"App\\": "src/"}}中的命名空间前缀是否仍与新项目名语义一致(比如旧名oldproject对应OldProject\\,改名后建议同步调整)
改完 name 后,composer dump-autoload 不够,得清缓存再重装
composer dump-autoload 只刷新自动加载映射,不处理已安装的 vendor 包元数据。Composer 本地会缓存包信息,尤其是当项目本身作为本地路径仓库被 require 时,缓存可能让旧 name 继续生效。
使用场景:你在本地开发一个私有包 A,另一个项目 B 通过 "repositories" + "path" 引用它;A 改了 name,但 B composer update 后仍加载旧名。
- 删掉
vendor/目录(别只删部分) - 运行
composer clear-cache - 再执行
composer install或composer update - 如果用了
"repositories": [{"type": "path", ...}],确认路径指向的是改名后的项目根目录,且该目录下composer.json已更新
Git 仓库名、远程 URL 和目录名要不要同步改?
Composer 不读 Git 仓库名,也不强制要求目录名和 name 一致。但不改会埋坑:协作时别人 clone 下来,看到目录叫 old-project,但 composer.json 写着 new-org/new-name,容易混淆;CI 脚本若硬编码了路径或包名,也会失败。
2013年07月06日 V1.60 升级包更新方式:admin文件夹改成你后台目录名,然后补丁包里的所有文件覆盖进去。1.[新增]后台引导页加入非IE浏览器提示,后台部分功能在非IE浏览器下可能没法使用2.[改进]淘客商品管理 首页 列表页 内容页 的下拉项加入颜色来区别不同项3.[改进]后台新增/修改淘客商品,增加淘宝字样的图标和天猫字样图标改成天猫logo图标4.[改进]为统一名称,“分类”改
性能 / 兼容性影响:无。只是人肉维护成本问题。
- Git 远程 URL 建议同步更新,避免
git push origin main推错仓库 - 本地项目目录名可以改,但改完要确保所有终端工作路径、IDE 打开路径、CI 配置里的
cd指令都跟着更新 - 如果项目已发布到 Packagist,改
name相当于发布一个全新包,旧name不会自动重定向
别漏掉 autoload 命名空间和测试引导文件里的硬编码
很多项目在 tests/bootstrap.php、phpunit.xml、phpstan.neon 或 IDE 配置里会显式写死命名空间或路径。这些地方不会因 composer.json 改名而自动更新。
容易踩的坑:单元测试全挂,PHPStan 报找不到类,IDE 不识别新命名空间 —— 表面看是 Composer 问题,其实是这些配置还指着老名字。
- 搜索整个项目:grep -r 'OldProject\\\\' . --include="*.php" --include="*.xml" --include="*.neon"
- 检查
phpunit.xml里的和 - 查看
phpstan.neon中的autoload_files和scanDirectories - IDE(如 PHPStorm)里按
Ctrl+Shift+Alt+U(Windows)或Cmd+Shift+Alt+U(macOS)刷新索引,有时缓存会卡住旧命名空间









