Запускайте задачи Gulp во время установки композитора

Я развертываю приложение PHP на Heroku с помощью Composer. В настоящее время я использую Gulp для сжатия CSS / JS и фиксации его в репозитории Git. Мне было интересно, имеет ли смысл запускать задачи Gulp с помощью Composer post-install-cmd, Какова лучшая практика для этого?

6

Решение

Вы используете так называемый «multi-buildpack» для выполнения сборки Node.js (для установки Gulp) и PHP при развертывании.

Вот пример, который я недавно построил, который использует Bower для установки Bootstrap в Composer post-install-cmd, но принцип будет таким же:

http://heroku-multipack-nodejs-php-ex.herokuapp.com

Источники с README это объясняет процесс: https://github.com/dzuelke/heroku-multipack-nodejs-php-example

Вы также можете использовать composer compile шаг, если вы предпочитаете, чтобы установка Gulp не запускалась на каждом composer install: https://devcenter.heroku.com/articles/php-support#custom-compile-step

4

Другие решения

Думайте о Gulp как об универсальном исполнителе задач, а не об использовании Composer post-install-cmd (или подобный), чтобы сбежать на дополнительные задачи. Менеджер пакетов PHP не должен отвечать за выборку или сжатие внешних ресурсов, это не его работа. Gulp не только для задач, связанных с интерфейсом.

Для меня, используя Глоток-композитор имеет смысл.

3

gulp предоставляет гибкие инструменты для командных задач, так что, возможно, лучше всего использовать gulp для обновления или установки зависимостей компоновщика?
Взгляните на это Глоток-композитор пакет

Пример:

composer = require('gulp-composer');

gulp.task('composer', function () {
composer({ cwd: './php-stuff', bin: 'composer' });
});
2

Я бы порекомендовал использовать Symfony’s Компонент процесса для этого внутри некоторого обработчика сценария, а затем запустить его как post-install-cmd как вы сказали.

скрипты / композитор / 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 для проектов Drupal для большего вдохновения. (Например, динамическое получение пути к вашей теме для успешного выполнения этой команды в любой среде.)

0
По вопросам рекламы [email protected]