Composer中的scripts脚本如何使用_自动化任务与钩子配置

33次阅读

Composer的scripts脚本支持多种内置事件钩子,如pre-install-cmd、post-install-cmd、pre-update-cmd、post-update-cmd等,分别在安装或更新前后触发,用于自动化执行环境检查、缓存清除、密钥生成、数据库迁移等任务;此外还有autoload相关钩子(如post-autoload-dump)和包操作钩子,可在特定生命周期节点自动运行自定义命令,提升开发效率与项目一致性。

Composer中的scripts脚本如何使用_自动化任务与钩子配置

Composer的scripts脚本提供了一种在项目生命周期中自动化执行任务的强大机制。它允许你定义自定义命令,并将其绑定到Composer的各种事件上,从而在包安装、更新或其他操作前后自动运行脚本,极大提升开发效率和项目维护的便捷性。

在Composer项目中,scripts字段位于composer.json文件的根部,它是一个JSON对象,键是脚本名称或Composer事件名称,值则是要执行的命令(可以是单个字符串或一个字符串数组)。这就像是给你的项目配置了一个自动化指挥中心,让Composer在特定时机替你跑腿。

我个人在项目中,最常用到的就是post-install-cmdpost-update-cmd。比如,每次新同事拉取项目代码后运行composer install,或者团队更新依赖时运行composer update,我都会希望项目能自动完成一些初始化工作:清除缓存、生成应用密钥、运行数据库迁移等等。手动操作这些步骤不仅繁琐,还容易遗漏,引入不必要的bug。

一个典型的scripts配置可能长这样:

{     "name": "vendor/project",     "description": "A demo project",     "type": "project",     "require": {         "php": "^8.1",         "laravel/framework": "^10.0"     },     "autoload": {         "psr-4": {             "App": "app/"         }     },     "scripts": {         "post-install-cmd": [             "php artisan key:generate",             "php artisan migrate --force",             "@php artisan cache:clear"         ],         "post-update-cmd": [             "php artisan optimize:clear",             "@php artisan cache:clear"         ],         "test": "phpunit --colors=always",         "lint": "php-cs-fixer fix --dry-run --diff",         "fix": "php-cs-fixer fix",         "serve": "php artisan serve"     },     "config": {         "allow-plugins": {             "php-http/discovery": true         }     } }

这里可以看到,post-install-cmdpost-update-cmd是Composer预定义的事件钩子。当composer installcomposer update完成后,Composer会自动执行这些事件下配置的命令。注意scripts2符号,它表示抑制命令执行时的错误信息,这在某些情况下很有用,比如你确定某个命令即使失败也不影响整体流程。

除了这些内置事件,你还可以定义自己的自定义脚本,比如scripts3、scripts4、scripts5、scripts6。这些脚本可以通过scripts7来手动执行。这为团队提供了一致的命令入口,避免了每个人记住一长串命令行参数的麻烦。比如说,运行测试就只需要scripts8,而不是scripts9。这种封装性,对于大型项目或者新手加入团队时,简直是福音。

Composer中的scripts脚本如何使用_自动化任务与钩子配置

千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。

Composer中的scripts脚本如何使用_自动化任务与钩子配置27

查看详情 Composer中的scripts脚本如何使用_自动化任务与钩子配置

脚本的值可以是单个字符串,也可以是字符串数组。如果是数组,Composer会按顺序依次执行。你甚至可以在脚本中调用其他的脚本,通过composer.json0的方式。这让脚本的组合和复用变得非常灵活。比如,你可以有一个composer.json1脚本,它内部调用composer.json2、composer.json3,然后可能再做一些部署前的准备工作。

Composer支持哪些内置事件钩子,它们各自有什么用途?

Composer的内置事件钩子,就像是项目生命周期中的一个个检查点,你可以在这些点上插入自己的自动化任务。理解这些钩子是有效利用Composer脚本的关键。我经常会把它们分成几类来记忆和使用。

安装/更新前后的钩子:

  • composer.json4: 在composer install命令执行前触发。我很少直接用它,但如果你需要在安装前做一些环境检查或准备工作,比如确保某个目录存在,它可能会派上用场。
  • post-install-cmd: 在composer install命令执行后触发。这是我用得最多的一个。比如,Laravel项目初始化时生成composer.json8文件、composer.json9、post-install-cmd0,或者Symfony项目清除缓存、生成代理类,都非常适合放在这里。它确保了项目依赖安装完成后,所有必要的配置和初始化工作也随之完成。
  • post-install-cmd1: 在composer update命令执行前触发。类似于composer.json4,用于更新前的检查。
  • post-update-cmd: 在composer update命令执行后触发。和post-install-cmd类似,但通常用于依赖更新后的清理和优化。例如,清除旧的缓存、重新生成优化的autoload文件,或者执行一些依赖升级后的兼容性检查脚本。

自动加载(Autoload)相关的钩子:

  • post-install-cmd7: 在Composer生成post-install-cmd8文件前触发。如果你需要在自动加载文件生成前修改一些PSR-4或PSR-0的配置,或者动态生成一些类映射,这个钩子可能有用。
  • post-install-cmd9: 在Composer生成post-install-cmd8文件后触发。我个人觉得这个比post-install-cmd7更有用,比如在自动加载文件生成后,你可能需要运行一个脚本来编译某些类或优化某些加载路径。

包操作相关的钩子:

  • `pre-package-

以上就是Composer中的scripts脚本如何使用_自动化任务与钩子配置的详细内容,更多请关注php laravel js json composer app 字符串数组 封装性 php symfony laravel composer json 封装 字符串 命令行参数 对象 事件 数据库 bug 自动化

php laravel js json composer app 字符串数组 封装性 php symfony laravel composer json 封装 字符串 命令行参数 对象 事件 数据库 bug 自动化

text=ZqhQzanResources