如何利用Composer管理内部的脚手架工具?团队开发规范
先聊个基础的,但也是最容易踩坑的点。 新建项目,别一上来就敲 composer init。听我一句劝,直接用 create-project。原因很简单:init 只给你生成一个空荡荡的 composer.json,十行 JSON 代码,啥骨架都没有。你的最终资产应当是一个可被即时实例化的骨架。这个骨
先聊个基础的,但也是最容易踩坑的点。
新建项目,别一上来就敲 composer init。听我一句劝,直接用 create-project。原因很简单:init 只给你生成一个空荡荡的 composer.json,十行 JSON 代码,啥骨架都没有。你的最终资产应当是一个可被即时实例化的骨架。这个骨架自带公共目录结构、artisan 入口、环境示例文件,以及能自动运行的初始化脚本——而这些恰好是 init 绝对给不了你的。
create-project 做的事要完整得多:它会拉取整个模板包(比如 myteam/skeleton),解压目录,安装依赖,最后触发 post-create-project-cmd 脚本来完成密钥生成、环境文件复制等关键操作。
这里有个细节:内部模板包的 type 必须显式设为 "project"。否则 create-project 根本不认它为一个可实例化的骨架。
脚手架必须用 create-project,别碰 init
create-project会拉取整个模板包(比如myteam/skeleton),解压目录、安装依赖、运行post-create-project-cmd脚本(生成密钥、复制环境文件等)init只输出 10 行 JSON,之后还得手动配 autoload、require 框架、建 Git 仓库、设 Web 根目录——多数人卡在第二步- 内部模板包的
type必须设为"project",否则create-project不认它为可实例化骨架
post-create-project-cmd 脚本的放置有讲究
这个钩子只在新项目生成后、首次进入其目录时触发。它只认顶层 scripts 下的 post-create-project-cmd 字段(全小写,不能驼峰,不能漏短横线)。
- 脚本的工作目录是新建项目根目录(如
myapp/),不是模板源码目录,所以路径别写../template/src - 避免交互式操作(如
readline()),CI 环境下会卡住;改用预设值或环境变量注入 - 常见任务:复制
.env.example→.env、运行php artisan key:generate、清空.git并重新 init(避免继承模板仓库历史)

私有模板包的仓库配置不能省略
团队内部脚手架通常托管在私有 Git 仓库(如 GitLab 或 GitHub Enterprise)。不声明 repositories,create-project 就找不到包。
repositories必须写在使用方的composer.json(不是模板包自己的),且type设为"vcs",URL 用 HTTPS 或 SSH 地址- 若模板只有
dev-main分支,需显式加--stability=dev参数,否则默认只搜stable - 国内访问慢时,临时切回官方源:
composer config -g repo.packagist composer https://packagist.org。别长期依赖镜像——私有包往往不在镜像中同步
脚手架模板本身就是团队基建契约
模板包的 composer.json 不是“示例”,而是团队开发环境的起点契约。它必须自带不可绕过的约束。
"minimum-stability": "stable"+"prefer-stable": true,防止新项目一上来就引入@dev包"autoload"严格按 PSR-4 声明,如"MyTeamApp": "app/",禁用files或classmap"config"中预置"sort-packages": true和"allow-plugins"白名单(如"phpstan/extension-installer"),防插件失控"php"版本约束写在require下(如"php": "^8.2"),不用platform—— 后者在 CI 中易被忽略
复杂点不在命令怎么敲,而在于模板包是否真把 composer.json 当契约来维护。每次 create-project 都是在签一次约,合约内容错了,后面所有环境一致性都无从谈起。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















