自定义命令脚本通过在composer.json的scripts中定义快捷指令提升开发效率,如clear-cache、deploy和test等命令可简化执行流程;支持通过%param%传递参数或使用环境变量,结合&&和||实现错误处理,还可执行自定义PHP代码并利用Composer API进行复杂操作。
Composer自定义命令脚本,简单来说,就是让你在
composer.json
里定义一些快捷指令,省去敲长命令的麻烦。想象一下,你经常需要执行一连串的 Composer 命令,每次都得复制粘贴,是不是很烦?自定义命令脚本就能解决这个问题,让你的开发效率嗖嗖地提升。
解决方案
在
composer.json
文件的
scripts
部分添加自定义命令。
scripts
允许你定义事件(比如
post-install-cmd
,
pre-update-cmd
),也可以定义你自己的命令别名。
例如:
{ "name": "your-vendor/your-package", "description": "Your package description", "type": "library", "license": "MIT", "authors": [ { "name": "Your Name", "email": "your.email@example.com" } ], "require": { "php": ">=7.4" }, "scripts": { "clear-cache": [ "rm -rf var/cache/*", "echo 'Cache cleared!'" ], "deploy": [ "@clear-cache", "composer install --no-dev --optimize-autoloader", "echo 'Deployment complete!'" ], "test": "phpunit" } }
解释一下:
-
clear-cache
: 定义了一个清除缓存的命令,实际上是执行
rm -rf var/cache/*
和
echo 'Cache cleared!'
这两个 shell 命令。
-
deploy
: 定义了一个部署命令,它首先调用了
clear-cache
命令(通过
@clear-cache
),然后执行安装命令,最后输出一条消息。
-
test
: 定义了一个测试命令,直接调用
phpunit
。
执行自定义命令,只需在命令行输入:
composer clear-cache composer deploy composer test
是不是方便多了?
如何在Composer脚本中传递参数?
在定义 Composer 脚本时,你可能需要传递参数。Composer 提供了一种简单的方式来实现这一点。
例如,假设你有一个脚本需要传递一个环境参数:
{ "scripts": { "build": "node build.js %env%" } }
在命令行中,你可以这样运行:
composer build --env=production
%env%
会被替换为
production
。 注意,你需要在运行命令时使用
--
来分隔 Composer 命令和传递给脚本的参数。如果没有
--
,Composer 会尝试将
--env=production
解释为 Composer 的选项,这通常会导致错误。
另外,你也可以使用环境变量:
{ "scripts": { "build": "node build.js $ENV_VAR" } }
这种情况下,
$ENV_VAR
会被系统环境变量的值替换。
Composer脚本中如何处理错误和异常?
在 Composer 脚本中,错误处理很重要,否则一个脚本的失败可能会导致整个流程中断。Composer 默认情况下,如果脚本中的任何一个命令返回非零退出码,它就会停止执行。
你可以使用
&&
和
||
来链接命令,以实现更复杂的错误处理逻辑。
-
&&
: 只有前一个命令成功(退出码为 0)时,才会执行下一个命令。
-
||
: 只有前一个命令失败(退出码非 0)时,才会执行下一个命令。
例如:
{ "scripts": { "deploy": [ "composer install && echo 'Dependencies installed' || echo 'Failed to install dependencies'", "php artisan migrate && echo 'Migration successful' || echo 'Migration failed'" ] } }
在这个例子中,如果
composer install
失败,会输出 “Failed to install dependencies”,但脚本会继续执行。 同样,
php artisan migrate
也做了类似的错误处理。
另外,你也可以使用
set -e
命令来让脚本在遇到错误时立即退出(这在 Linux/macOS 系统中有效)。
{ "scripts": { "deploy": [ "set -e", "composer install", "php artisan migrate" ] } }
在这个例子中,如果
composer install
失败,脚本会立即退出,不会执行
php artisan migrate
。
如何在Composer脚本中使用自定义PHP代码?
有时候,简单的 shell 命令无法满足你的需求,你可能需要在 Composer 脚本中执行一些 PHP 代码。 Composer 提供了一种方式来执行自定义 PHP 代码。
首先,创建一个 PHP 脚本,例如
scripts/my-script.php
:
<?php // scripts/my-script.php echo "Hello from PHP script!n"; $param = $argv[1] ?? 'default'; // 获取参数 echo "Parameter: " . $param . "n"; // 执行一些复杂的逻辑
然后,在
composer.json
中定义脚本:
{ "scripts": { "my-command": "php scripts/my-script.php" } }
或者,如果你想传递参数:
{ "scripts": { "my-command": "php scripts/my-script.php %param%" } }
运行命令:
composer my-command --param=custom_value
在 PHP 脚本中,你可以使用
$argv
数组来获取传递的参数。
另外,你也可以使用 Composer 提供的 API。 首先,你需要引入 Composer 的 autoloader:
<?php // scripts/my-script.php require __DIR__ . '/../vendor/autoload.php'; use ComposerFactory; use ComposerIONullIO; $composer = Factory::create(new NullIO()); $package = $composer->getPackage(); echo "Package name: " . $package->getName() . "n"; // 执行一些操作
这种方式可以让你访问 Composer 的配置信息,执行更复杂的操作。
以上就是Composer如何自定义命令脚本_在composer php linux js json node mac ai macos 环境变量 cos php composer json echo var 事件 macos linux