首页 > 后端开发 > php教程 > PHP主|使用作曲家脚本构建自动化

PHP主|使用作曲家脚本构建自动化

Lisa Kudrow
发布: 2025-02-25 20:37:19
原创
932 人浏览过

PHP Master | Build Automation with Composer Scripts

PHP主|使用作曲家脚本构建自动化

遵循亚历山大·科格诺(Alexander Cogneau)与作曲家的依赖管理简介 ,您现在知道作曲家是管理外部项目依赖和版本限制的解析器。但这就是一切吗?在本文中,我将向您展示如何也可以将作曲家用作基本的构建自动化工具。

钥匙要点

    除了作为管理外部项目依赖性和版本限制的解析器外,
  • >作曲家还可以用作基本的构建自动化工具。它暴露了pre
  • >和post
  • 在执行过程中,
  • install/update/卸载事件挂钩可以为一系列自动任务脚本脚本。
>作曲家脚本

任何值得盐的构建自动化工具都必须提供脚本脚本一系列自动任务的能力 - 从建造,包装和运行测试套件到分期和生产系统的部署。例如,Phing基于ANT,允许您在XML构建文件中定义此类任务。 作曲家在这方面有所不同,因为它对这些任务是什么,或者根本没有执行这些任务。相反,作曲家的作用是在执行过程中揭示其前和后安装/卸载事件挂钩,您可以使用“脚本”回调,就像Pyrus提供的能力一样,可以通过package.xml中定义自定义命令。 - Plugin选项的安装,升级和卸载命令。 脚本属性是在您的root软件包的composer.json的root json对象中定义的 文件。您可以定义任何数量的PHP静态方法(必须由作曲家的自动加载机制自动加载),命令行可执行文件或两者的组合。 然后,在作曲家的执行过程中调用了这些脚本定义的任何自定义代码或软件包特定命令。注意的是,仅执行了根包的作曲家中定义的脚本。作曲家将不会执行根软件包依赖关系中指定的任何脚本。 在作曲家执行过程中发射以下事件:

    > pre-install-cmd - 发生在执行安装命令之前
  • >后安装-CMD - 发生在执行安装命令
  • 之后
  • > pre-preddate-cmd - 发生在执行更新命令之前
  • > tost-update-cmd - 发生在执行更新命令之后
  • >之后
  • >预包装安装 - 发生在安装软件包
  • >之前
  • >后包装安装 - 在安装软件包
  • 之后发生
  • >预包装 - 发生在更新软件包之前发生
  • >后包 - 在更新软件包后发生
  • >
  • >预包装 - uninstall - 发生在包装卸载
  • 之前
  • > package-uninstall - 在包装卸载
  • 之后发生
这些是相当不言自明的,我认为您会同意美丽在于它的简单性。但要说明,这是一个示例root软件包composer.json:
<span>{
</span>    <span>"name": "MyProject",
</span>    <span>"description": "An example to demonstrate the use of Composer scripts",
</span>    <span>"version": "1.0.0",
</span>    <span>"require": {
</span>        <span>"php": ">=5.3",
</span>        <span>"ext-xsl": "*",
</span>        <span>"ext-imap": "*",
</span>        <span>"ext-gd": "*"
</span>      <span>},
</span>
    <span>"autoload": {
</span>        <span>"psr-0": {
</span>            <span>"MyProject": "src/"
</span>        <span>}
</span>    <span>},
</span>
    <span>"scripts": {
</span>        <span>"pre-install-cmd": "MyProject\Installer::preInstall",
</span>        <span>"post-install-cmd": [
</span>            <span>"MyProject\Installer::postInstall"
</span>        <span>],
</span>        <span>"post-package-install": [
</span>            <span>"MyProject\Installer::postPackageInstall",
</span>            <span>"phpunit -c /tests",
</span>            <span>"./bin/install.sh"
</span>        <span>]
</span>    <span>}
</span><span>}</span>
登录后复制
我为预安装CMD,后安装后CMD和包装后安装事件定义了一些脚本。如您所见,我们可以定义静态PHP方法和命令行可执行文件的任何组合。在包装后安装事件的情况下,它还执行一些单元测试和自定义安装脚本。 这是我们的示例脚本的样子:
<span><span><?php
</span></span><span><span>namespace MyProject;
</span></span><span><span>use ComposerScriptEvent;
</span></span><span>
</span><span><span>class Installer
</span></span><span><span>{
</span></span><span>    <span>public static function preInstall(Event $event) {
</span></span><span>        <span>// provides access to the current ComposerIOConsoleIO
</span></span><span>        <span>// stream for terminal input/output
</span></span><span>        <span>$io = $event->getIO();
</span></span><span>        <span>if ($io->askConfirmation("Are you sure you want to proceed? ", false)) {
</span></span><span>            <span>// ok, continue on to composer install
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>// exit composer and terminate installation process
</span></span><span>        <span>exit;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public static function postInstall(Event $event) {
</span></span><span>        <span>// provides access to the current Composer instance
</span></span><span>        <span>$composer = $event->getComposer();
</span></span><span>        <span>// run any post install tasks here
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public static function postPackageInstall(Event $event) {
</span></span><span>        <span>$installedPackage = $event->getComposer()->getPackage();
</span></span><span>        <span>// any tasks to run after the package is installed?
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
登录后复制
当这些事件中的每个事件都被解雇时,作曲家的内部事件处理程序将ComposersCriptevent对象作为第一个(也是唯一的)参数传递给每个回调。活动 对象将其他作曲家对象的以下获取器曝光到您的回调:
  • getComposer() - 返回CompoSercosser的当前实例
  • > getName() - 返回要触发的事件的名称
  • > getio() - 返回当前输入/输出流,该流将ComposerioioioioInterface实现用于读取/写入控制台
  • >
您可以针对每个方法签名的Composer API文档,以及这些对象中每个对象的其他方法,尤其是Composer实例和IO接口。 尽管这种看似基本的实现可能并不像phing的定义那样“强大”,但其简单性掩盖了它令人难以置信的灵活性。它利用您在PHP中的现有知识投资,并且有了一些创造力和想象力,您可以使用Composer的依赖性解决方案和本机PHP脚本来创建一些相当复杂的构建和删除任务。您甚至可以将其集成到Jenkins中以进行连续集成。

摘要

在本文中,我介绍了一个基本的示例,说明了如何使用作曲家脚本来执行构建自动化。这些任务可以像您需要的那样简单或复杂,因为它们利用了您在PHP中的现有知识投资。 希望本文将激发您使用作曲家不仅仅是依赖性管理。有关如何使用Composer脚本的更多信息,请参见GetComposer.org/doc/articles/scripts.md。 通过fotolia 图像 >常见问题(常见问题解答)有关用作曲家脚本构建自动化

>作曲家在PHP开发中的主要功能是什么?它使您可以声明您的项目取决于的库,并且它将为您管理(安装/更新)。作曲家与YUM或APT的意义相同。是的,它处理“软件包”或库,但每项项目管理它们,将它们安装在您的项目中的目录(例如供应商)中。

>

>如何使用Composer脚本自动化任务?

>我可以使用Composer脚本进行测试吗?您可以在Composer.json文件中定义一个运行测试的脚本。例如,您可以定义一个称为“测试” phpunit的脚本。然后,您可以使用“ Composer Run-Script Test”命令从命令行运行测试。

>如何使用Composer脚本进行部署?

COMPOSER脚本可用于部署通过在Composer.json文件中定义脚本,该文件执行部署应用程序的必要步骤。这可能包括诸如编译资产,优化代码和将文件上传到服务器之类的任务。定义脚本后,您可以使用'Composer Run-Script'命令从命令行中运行它。

作曲家脚本可以运行自定义PHP代码吗?

是的,Composer脚本可以运行自定义PHP代码。您可以在Composer.json文件中定义一个运行PHP文件的脚本。 PHP文件可以包含您想要的任何代码。当您使用“ Composer Run-script”命令运行脚本时,将执行PHP代码。

>

>如何在Composer中管理Composer中的脚本? .json文件。每个脚本被定义为键值对,关键是脚本的名称,值是要运行的命令。您可以通过编辑composer.json文件来添加,修改或删除脚本。

我可以使用Composer脚本来自动化构建过程吗?

是的,Composer脚本可用于自动化构建过程。通过在Composer.json文件中定义脚本,您可以自动化任务,例如编译代码,缩小资产和生成文档。然后可以使用“ Composer Run-Script”命令从命令行中运行这些脚本。

>

>使用Composer脚本进行自动化有什么好处?您的开发过程效率更高。通过自动化重复任务,您可以节省时间并减少错误的风险。作曲家脚本也使您的构建过程更加一致,因为每次以相同的方式执行相同的任务。

>

我可以将Composer脚本与其他工具结合使用吗?可以与其他工具一起使用。例如,您可以使用作曲家脚本来运行GULP任务,也可以运行Phpunit测试套件。这使您可以利用其他工具的功能,同时仍能从作曲家脚本提供的自动化中受益。

>我如何了解有关使用作曲家脚本进行自动化的更多信息?

>有很多资源可帮助您了解有关使用Composer脚本进行自动化的更多信息。官方的作曲家文档是一个不错的起点。在线提供了许多教程和博客文章,提供了使用作曲家脚本的示例和最佳实践。

>

以上是PHP主|使用作曲家脚本构建自动化的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板