使用Composer的脚本/scripts属性
本文介绍composer.json文件里的语法和关键字的用处
我们在项目的根目录创建并定义composer.json文件,该文件里的JSON对象内定义一个"scripts"
属性,该属性包含一系列事件对应要执行的回调脚本,一个事件可以用数组定义多个事件脚本。
对于同一个事件,多个事件脚本会按照定义的顺序触发。
** 被执行的php回调脚本一定要定义成静态方法 **
定义脚本
在项目根目录下的composer.json
文件内定义脚本
1 | "scripts": { |
使用前面定义的例子,这里的MyVendor\MyClass
类,就可以被使用来执行 PHP 的回调:
1 |
|
当一个事件被触发,Composer 的内部事件处理程序将接收一个Composer\Script\Event
对象,这是传递给您的PHP回调函数的第一个参数。这个Event
对象拥有一些如getter
方法来帮助你取得当前事件的上下文(context):
- getComposer(): 返回当前的
Composer\Composer
对象实例。 - getName(): 返回事件名称的字符串。
- getIO(): 返回当前的
输入\输出
流,它实现了Composer\IO\IOInterface
接口,以便在控制台中使用。
上面是当事件发生时,composer自动调用对应的事件函数。当然我们也可以手动运行这些事件脚本
手动运行脚本
使用下面的语法结构:
composer run-script [--dev] [--no-dev] script
如:composer run-script post-install-cmd
将会按顺序运行所有post-install-cmd
事件下定义的脚本。
事件列表
在composer运行过程中将会触发下面的事件:(pre为执行前,post为执行后)
事件名称 | 说明 |
---|---|
pre-install-cmd | 在install命令执行前触发 |
post-install-cmd | 在install命令执行后触发 |
pre-update-cmd | 在update命令执行前触发 |
post-update-cmd | 在update命令执行后触发 |
pre-status-cmd | 在status命令执行前触发 |
post-status-cmd | 在status命令执行后触发 |
pre-archive-cmd | 在archive命令执行前触发 |
post-archive-cmd | 在archive命令执行后触发 |
pre-package-install | 在 资源包/第三方包/库 安装前触发 |
post-package-install | 在 资源包/第三方包/库 安装后触发 |
pre-package-update | 在 资源包/第三方包/库 更新前触发 |
post-package-update | 在 资源包/第三方包/库 更新后触发 |
pre-package-uninstall | 在 资源包/第三方包/库 卸载前触发 |
post-package-uninstall | 在 资源包/第三方包/库 卸载后触发 |
pre-autoload-dump | 在自动加载器被转储前触发,无论是install/update 还是dump-autoload 命令都会触发 |
post-autoload-dump | 在自动加载器被转储后触发,无论是install/update 还是dump-autoload 命令都会触发 |
post-root-package-install | 在create-project 命令期间,根包安装完成后触发 |
post-create-project-cmd | 在create-project 命令执行后触发 |
注意:composer自会执行处于项目根目录下的composer.json文件里定义的脚本。不会去执行处于依赖包中的composer.json文件里的
install
或update
定义的脚本。如果需要执行install
或update
命令的脚本,要确保他们都是在项目根目录下的composer.json中定义