0

0

composer如何设置脚本自动执行_在composer中使用hooks【技巧】

尼克

尼克

发布时间:2026-03-12 19:42:31

|

504人浏览过

|

来源于php中文网

原创

Composer 的 scripts 是命令别名与执行时机控制,非钩子;自动执行需用 post-install-cmd 等事件,而非自定义 shell 脚本。

composer如何设置脚本自动执行_在composer中使用hooks【技巧】

Composer 的 scripts 不是钩子(hooks),它只是命令别名 + 执行时机控制;想实现“安装后自动执行某操作”,得靠 post-install-cmd 这类事件,而不是自己写个 shell 脚本扔进去就完事。

哪些 event 名字能真正触发自动执行

Composer 只在特定生命周期事件发生时调用 scripts,不是所有名字都有效。常见且稳定可用的有:

  • pre-install-cmd:运行 composer install
  • post-install-cmdcomposer install 成功后(含首次安装)
  • pre-update-cmd:运行 composer update
  • post-update-cmdcomposer update 成功后
  • post-autoload-dump:每次自动生成 autoload 文件后(比如增删包、改 autoload 配置)

注意:post-root-package-installpost-create-project-cmd 只在 create-project 场景下触发,普通 install/update 不会跑。

脚本内容写成 PHP 函数还是 shell 命令

两种写法都能用,但行为差异很大:

  • 写成字符串如 "php build.php":走系统 shell 执行,路径基于当前工作目录,环境变量继承终端会话
  • 写成数组如 ["MyScript::build"]:由 Composer 加载并调用静态方法,MyScript 必须可 autoload,且不能依赖未安装完成的依赖(post-install-cmd 时 vendor 可能还没完全就绪)

推荐优先用 shell 命令形式,更可控。例如:

"scripts": {
  "post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize:clear"
  ]
}

如果要用 PHP 类,确保类文件在 autoload/files 或已声明命名空间,并在 post-autoload-dump 后再调用。

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载

为什么 post-install-cmd 有时不执行

这不是 bug,而是 Composer 的优化机制在起作用:

  • 运行 composer install --no-scripts 会跳过全部 scripts
  • 如果 vendor/autoload.php 已存在且 composer.lock 没变,Composer 可能直接跳过 install 流程,也就不会触发 post-install-cmd
  • 脚本中用了 exit() 或抛出未捕获异常,会导致后续 script 中断,且 Composer 不会报错提示
  • Windows 下用双引号包裹命令时,反斜杠或空格容易被 cmd 解析错,建议统一用单引号或改用 cross-env

调试技巧:加一句 "echo 'running post-install-cmd'" 到开头,确认是否真没进。

scripts 和插件(plugin)的本质区别

scripts 是用户层的快捷命令封装,没有权限干涉 Composer 内部流程;而 plugin 是通过 composer-plugin-api 注册监听器,能 hook 到更底层事件(如包下载前、包解压后)。如果你需要:

  • 修改包安装路径
  • 动态生成配置文件并注入 autoload
  • 拦截并重写某个包的源地址

那 scripts 做不到,必须写 plugin。但 90% 的“自动执行”需求,post-autoload-dump + 简单 shell 就够了——别一上来就想造轮子。

最常被忽略的一点:scripts 的执行顺序是按数组顺序来的,但每个 script 是独立进程;如果两个 script 都写成 php foo.php,它们之间不共享内存或变量,也看不到彼此 stdout。要传数据,得靠文件或环境变量。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

161

2023.12.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1204

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 7.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号