运行 Gulp composer 安装期间的任务
Run Gulp tasks during composer install
我正在使用 Composer 将 PHP 应用程序部署到 Heroku。目前我正在使用 Gulp 压缩 CSS/JS 并将其提交到 Git 存储库。我想知道使用 Composer 的 post-install-cmd
来 运行 Gulp 任务是否更有意义。最佳做法是什么?
gulp 为命令任务提供了灵活的工具,所以也许最好的做法是使用 gulp 来更新或安装 composer 依赖项?
看看这个gulp-composer包
示例:
composer = require('gulp-composer');
gulp.task('composer', function () {
composer({ cwd: './php-stuff', bin: 'composer' });
});
您使用所谓的 "multi-buildpack" 执行 Node.js(安装 Gulp)和 PHP 在部署时构建。
这是我前段时间构建的一个例子,使用 Bower 在 Composer Bootstrap 中安装 Bootstrap,但原理是一样的:
http://heroku-multipack-nodejs-php-ex.herokuapp.com
带有 README
的来源解释了该过程:https://github.com/dzuelke/heroku-multipack-nodejs-php-example
如果您更喜欢 Gulp 安装而不是 运行 每个 composer install
,您也可以使用 composer compile
步骤:https://devcenter.heroku.com/articles/php-support#custom-compile-step
将 Gulp 视为一个通用的任务运行器,而不是使用 Composer 的 post-install-cmd
(或类似的)来完成额外的任务。 PHP 包管理器不应该负责获取或压缩前端资产,那不是它的工作。 Gulp 不仅仅适用于与前端相关的任务。
对我来说,使用 gulp-composer 最有意义。
我建议在某些脚本处理程序中使用 Symfony 的 Process Component,然后 运行 如您所说 post-install-cmd
。
scripts/composer/ScriptHandler.php
use Composer\Script\Event;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
class ScriptHandler {
public static function gulpBuild(Event $event) {
$process = new Process('cd /path/to/my/theme && gulp build');
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
$event->getIO()->write($process->getOutput());
}
else {
$event->getIO()->write("Recompiled and compressed CSS/JS");
}
}
}
composer.json
"autoload": {
"classmap": [
"scripts/composer/ScriptHandler.php"
]
},
"scripts": {
"post-update-cmd": [
"DrupalProject\composer\ScriptHandler::gulpBuild"
]
},
检查 Composer template for Drupal projects 以获得更多灵感。 (例如,动态获取主题的路径,以便在每个环境中成功执行该命令 运行。)
我正在使用 Composer 将 PHP 应用程序部署到 Heroku。目前我正在使用 Gulp 压缩 CSS/JS 并将其提交到 Git 存储库。我想知道使用 Composer 的 post-install-cmd
来 运行 Gulp 任务是否更有意义。最佳做法是什么?
gulp 为命令任务提供了灵活的工具,所以也许最好的做法是使用 gulp 来更新或安装 composer 依赖项? 看看这个gulp-composer包
示例:
composer = require('gulp-composer');
gulp.task('composer', function () {
composer({ cwd: './php-stuff', bin: 'composer' });
});
您使用所谓的 "multi-buildpack" 执行 Node.js(安装 Gulp)和 PHP 在部署时构建。
这是我前段时间构建的一个例子,使用 Bower 在 Composer Bootstrap 中安装 Bootstrap,但原理是一样的:
http://heroku-multipack-nodejs-php-ex.herokuapp.com
带有 README
的来源解释了该过程:https://github.com/dzuelke/heroku-multipack-nodejs-php-example
如果您更喜欢 Gulp 安装而不是 运行 每个 composer install
,您也可以使用 composer compile
步骤:https://devcenter.heroku.com/articles/php-support#custom-compile-step
将 Gulp 视为一个通用的任务运行器,而不是使用 Composer 的 post-install-cmd
(或类似的)来完成额外的任务。 PHP 包管理器不应该负责获取或压缩前端资产,那不是它的工作。 Gulp 不仅仅适用于与前端相关的任务。
对我来说,使用 gulp-composer 最有意义。
我建议在某些脚本处理程序中使用 Symfony 的 Process Component,然后 运行 如您所说 post-install-cmd
。
scripts/composer/ScriptHandler.php
use Composer\Script\Event;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
class ScriptHandler {
public static function gulpBuild(Event $event) {
$process = new Process('cd /path/to/my/theme && gulp build');
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
$event->getIO()->write($process->getOutput());
}
else {
$event->getIO()->write("Recompiled and compressed CSS/JS");
}
}
}
composer.json
"autoload": {
"classmap": [
"scripts/composer/ScriptHandler.php"
]
},
"scripts": {
"post-update-cmd": [
"DrupalProject\composer\ScriptHandler::gulpBuild"
]
},
检查 Composer template for Drupal projects 以获得更多灵感。 (例如,动态获取主题的路径,以便在每个环境中成功执行该命令 运行。)