Compositeur - exécuter des scripts uniquement en environnement de dev
C'est mon compositeur.fichier json:
"require": {
"php": ">=5.4",
"zendframework/zendframework": "2.*",
"doctrine/doctrine-module": "dev-master",
"doctrine/doctrine-orm-module": "0.*",
"gedmo/doctrine-extensions": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"scripts": {
"post-update-cmd": [
"rm -rf vendor/Behat",
"git clone git://github.com/Behat/Behat.git",
"cp composer.phar Behat/composer.phar",
"cd Behat && git submodule update --init",
"cd Behat && php composer.phar install",
"cd Behat && php composer.phar require guzzle/guzzle:3.0.*",
"mv Behat vendor/Behat",
"ln -sf ../Behat/bin/behat vendor/bin/"
]
}
Comment puis-je faire en sorte que les scripts ne sont exécutés dans l'environnement de dev?
Fondamentalement, je veux que l'exécution de scripts seulement quand je l'appelle:
php composer.phar update --dev
Vous devez vous connecter pour publier un commentaire.
À faire de la non-développement de l'environnement de mise à jour sans déclencher des scripts, utilisez l'option
--no-scripts
commutateur de ligne de commande pour leupdate
commande:Par défaut, Compositeur scripts sont exécutés uniquement dans le package de base. Donc, vous pourriez avoir un seul paquet pour le développement et dans l'environnement live en faire un dépendance du système live.
En dehors de cela, je ne vois aucun moyen de distinguer automatiquement les scripts.
Il n'est pas possible de choisir différentes script d'installation par défaut et la --dev option mais vous pouvez utiliser la méthode isDevMode() dans Compositeur\Script\Événement pour exécuter la commande uniquement dans un environnement de développement. http://getcomposer.org/apidoc/master/Composer/Script/Event.html
Vous pouvez obtenir le même effet par la mise en place d'un script personnalisé pour le dev de la voie, au lieu d'utiliser le
post-update-cmd
crochet.Puis exécutez simplement
php composer.phar dev-update
Vous pouvez utiliser le COMPOSER_DEV_MODE variable d'environnement (nouveau dans la version 1.3.0-RC - 2016-12-11):
sh: 1: [: -eq: unexpected operator
. Quelque chose à l'esprit?$COMPOSER_DEV_MODE
n'est pas définie. Se pourrait-il que vous êtes à l'aide d'un compositeur de plus que la version 1.3.0-RC?Composer 1.8.3 2019-01-30 08:31:33
. J'ai remplacé sh commandes à une classe PHP statique appel de méthode. Il ne s'ajouter un autre répertoire et nécessaire de chargement automatique avec le PSR-0, mais à la fin c'était plus propre à ajouter climatisées de comportement.Introduction
Certaines réponses sont un peu bref et ne pas aller dans les détails sur le contexte dans lequel c'est fait. J'aimerais partager des connaissances avec celui qui est toujours perplexe après la lecture de la réponse à la question précédente.
Déterminer la bonne option pour vous
D'abord, prenez un moment pour réaliser que vous êtes effectivement la création d'un écoulement différentes, spécifiques à un environnement spécifique (par exemple, votre serveur de développement/conteneur). C'est contre toute les meilleures pratiques, comme c'est généralement sujettes à des erreurs. Cela dit, vous pouvez réaliser ce que vous voulez de plusieurs façons;
Pas de déclenchement de tous les scripts (docs)
Si sur certains environnement que vous ne voulez pas déclencher des scripts, vous pouvez éviter cela en utilisant le
--no-scripts
drapeau.Documentation lit:
--no-scripts
: Saute exécution de scripts définis dans compositeur.json.Ceci est particulièrement utile lors de la mise à niveau des paquets, tandis que votre code ne fonctionne pas actuellement. Il serait également fonctionner si votre seul des scripts de test et de développement liées à l'.
Exécution d'un script séparément (docs)
Suffit d'exécuter la commande précise en tant que de besoin:
Ceci est utile lorsque vous souhaitez exécuter un script uniquement sur des occasions particulières.
Par exemple, à construire des systèmes qui ont à effectuer un certain script avant d'exécuter tous les tests; de construire des systèmes offre des options de configuration pour appeler des scripts personnalisés comme ci-dessus.
La définition d'une condition dans la commande (docs)
Documentation lit: Lors d'un compositeur installer ou mettre à jour des processus, une variable nommée
COMPOSER_DEV_MODE
sera ajouté à l'environnement. Si la commande a été exécutée avec l'option --no-dev drapeau, cette variable est définie sur 0, sinon il sera mis à 1.Un exemple pourrait ressembler à
Personnellement je dirais que c'est le recommandé façon, si vous utilisez des conteneurs.
Remarque: cela ne fonctionne pas sur windows, car il aurait besoin de
%COMPOSER_DEV_MODE%
.Il y a aussi des paquets (comme scriptsdev par neronmoon) qui vous aideront à atteindre le même objectif sans avoir à taper le dessus dans toutes les commandes, à l'aide d'un
dev-scripts
dans la sectionextra
section dans compositeur.jsonLa définition d'une condition dans votre script PHP (docs)
Appeler une méthode PHP, qui permet de contrôler votre environnement basé sur la façon dont votre application fait déjà cela. Vous pouvez même réutiliser cette condition en la combinant avec la méthode ci-dessus; "la Définition d'une condition dans la commande".
Vous pouvez alors aller de l'avant et de créer la classe, comme suit:
Dans de nombreux moderne cadres il existe déjà un mécanisme pour déterminer l'environnement d'exécution de l'application (Symfony façon, Laravel façon).
Fils exécuter (docs)
Depuis la plupart des applications PHP aussi, de nos jours transpile leurs fichiers javascript, soit MNP ou de la Laine serait installé. Vous pouvez utiliser les scripts section pour exécuter cette partie uniquement sur le développement des appareils/récipients. Par exemple:
avoir une section dans le paquet.json
Le but de cela est de votre compositeur.json propre. Dans le fil, vous pourriez avoir des scripts pour
dev-server
,test
etbuild
.Voici le petit paquet, que vous pouvez utiliser pour le faire
https://github.com/neronmoon/scriptsdev
Il ajoute la possibilité de définir uniquement-dev scripts.
l'utilisation de la
Exécutez la commande suivante.