Composer init –author指定作者 快速设置作者信息【方法】

21次阅读

composer init 不支持 –author 参数,因其设计为交互式向导,源码中未定义该选项;可通过预写 composer.json、初始化后编辑或手写文件三种方式设置作者信息。

Composer init –author指定作者 快速设置作者信息【方法】

composer init 本身不支持 --author 参数,直接运行 composer init --author "name " 会报错:Unrecognized option: --author。作者信息必须在交互式流程中输入,或通过预填充 composer.json 手动设置。

为什么 composer init 没有 --author 选项

Composer 的 init 命令设计为交互式向导,所有字段(包括 namedescriptionauthortype 等)默认需人工确认。它不提供批量跳过或预设 author 的 CLI 标志 —— 这是官方有意为之的限制,不是遗漏。

  • 源码层面,InitCommand 类未定义 --author 作为可接受选项
  • 即使使用 -n(non-interactive)模式,也只跳过全部提问,不会自动填入 author
  • 试图用 -- 传参或环境变量覆盖均无效

真正能快速设置 author 的三种实操方式

绕过交互,直接落定作者信息,核心思路是:避免走 init 流程,改用生成或编辑 composer.json

  • 方式一:用 echo + composer init -n 预写入(推荐)
    先手动创建最小 composer.json,再让 init -n 读取并补全其他字段:
    echo '{"name": "vendor/package", "description": "A demo package", "authors": [{"name": "Your Name", "email": "you@example.com"}]}' > composer.json composer init -n

    注意:-n 不会覆盖已有字段,只补空缺项(如 typelicense),authors 已存在则完全保留

  • 方式二:直接 composer init 后立刻修改 JSON
    运行 composer init,在 author 提示处直接回车跳过(留空),初始化完成后立即编辑:
    composer init # 在 author 步骤按 Enter(此时 authors 字段为空数组或缺失) sed -i 's/"authors": []/"authors": [{"name": "Your Name", "email": "you@example.com"}]/' composer.json

    windows 用户请用 PowerShell 或手动编辑

  • 方式三:跳过 init,手写基础 composer.json(最轻量)
    对熟悉结构的人最快:
    {   "name": "vendor/package",   "description": "My package",   "type": "library",   "authors": [     {       "name": "Your Name",       "email": "you@example.com"     }   ],   "require": {} }

    保存后即可直接运行 composer install

作者字段格式和常见坑

authors 是数组,哪怕只有一人也必须用 [{...}],写成对象 {...}字符串都会导致 composer validate 失败。

  • 字段名必须是 nameemailhomepagerole 可选,但非标准字段可能被某些工具忽略)
  • 邮箱不校验格式,但建议用真实可联系地址,否则 Packagist 审核可能质疑维护者真实性
  • 如果项目已提交到 Packagist,修改 composer.json 中的 author 不会自动同步到平台页面 —— 那里显示的是首次提交时抓取的信息,需在 Packagist 后台手动更新
  • CI/CD 场景下慎用 echo 方式:若 name 含斜杠(如 acme/my-pkg),需确保 shell 能正确解析 JSON 引号嵌套

真正省时间的点不在“加个参数”,而在于接受 composer init 的交互本质,转而用更可控的方式构造 composer.json —— 尤其当你要批量初始化多个包时,手写模板或脚本生成比反复敲交互提示快得多。

text=ZqhQzanResources