You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有类似composer require的功能用于添加Composer自定义脚本?

如何向Composer项目添加自定义脚本?

我正在为新项目搭建自动化部署流程,包括创建Composer项目、添加依赖包等。目前遇到的问题是如何向composer.json中添加自定义脚本。

以下是我的php-init文件片段:

#... 其他脚本...
docker run -it --rm --name sr-composer -v "$PWD"/setup:/app hidden-directory/docker/php/php8.1-code-quality bash -c "composer create-project --quiet --prefer-dist laravel/laravel ." || exit $?
docker run -it --rm --name sr-composer -v "$PWD"/setup:/app hidden-directory/docker/php/php8.1-code-quality bash -c "composer require --quiet --dev nunomaduro/larastan" || exit $?
docker run -it --rm --name sr-composer -v "$PWD"/setup:/app hidden-directory/docker/php/php8.1-code-quality bash -c "composer require --dev brianium/paratest" || exit $?
#... 更多脚本...

我希望在生成的composer.json中添加一批后续会用到的自定义脚本,目前我通过jq命令修改文件:

#... 其他脚本...
cp composer.json composer-temp.json
jq '.scripts += {"xc:instanciate": ["php artisan telescope:install","php artisan migrate:fresh"]}' composer-temp.json > composer.json
#... 更多脚本...

请问是否存在类似composer require <package_name>的命令,可在创建Composer项目时定义自定义脚本?我查阅了资料但未找到相关内容,还是我应该继续使用jq来操作composer.json文件?


解答

Composer本身并没有提供类似composer require那样直接批量添加自定义脚本的命令,但有几种更优雅的替代方案:

  1. 用Composer原生config命令添加
    虽然没有专门的添加脚本命令,但可以通过composer config直接设置脚本项,完全不需要额外工具:

    • 单命令形式:
      composer config scripts.xc:instanciate "php artisan telescope:install && php artisan migrate:fresh"
      
    • 数组多命令形式(和你用jq实现的效果一致):
      composer config scripts.xc:instanciate '["php artisan telescope:install", "php artisan migrate:fresh"]' --json
      

    这种方式完全贴合Composer生态,不需要依赖第三方工具,适合标准化流程。

  2. 优化现有jq流程
    如果你已经熟悉jq且流程中已经集成了它,继续使用也没问题,可优化命令避免临时文件:

    jq '.scripts += {"xc:instanciate": ["php artisan telescope:install","php artisan migrate:fresh"]}' composer.json > temp.json && mv temp.json composer.json
    

    或者安装moreutils包后用sponge原地修改:

    jq '.scripts += {"xc:instanciate": ["php artisan telescope:install","php artisan migrate:fresh"]}' composer.json | sponge composer.json
    
  3. 预定义模板文件合并
    如果有固定的自定义脚本集合,可预先写好composer-template.json模板,创建项目后用jq合并:

    jq -s '.[0] * .[1]' composer.json composer-template.json > new-composer.json && mv new-composer.json composer.json
    

总结:优先推荐用composer config命令,完全原生且简洁;如果已经依赖jq,优化后的命令也能高效完成需求。

内容的提问来源于stack exchange,提问作者dehood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:10:30