Cet article s’appuie sur le README.md et le UPGRADE.md du dépôt laravel/cpx. Il reflète l’état de la version 2.0.0 sortie le 24 juillet 2026.
Qu’est-ce que cpx ?
cpx est un outil qui permet d’exécuter les commandes fournies par un package Composer sans avoir à l’installer. On peut le voir comme l’équivalent Composer denpx en npm.
À quoi cela sert-il ?
Installer chaque outil individuellement aveccomposer global require pose plusieurs problèmes :
- Les dépendances globales entrent en conflit entre elles (typiquement des dépendances communes comme
nikic/php-parserousymfony/console). - On veut parfois passer d’une version à l’autre du même outil selon les projets.
- Sur le long terme, on oublie de mettre à jour les packages globaux.
- On préfère éviter d’installer globalement un outil dont on n’a besoin qu’une seule fois.
Réécriture complète en v2.0
En v2.0, cpx a été entièrement réécrit et est désormais distribué sous forme de PHAR autonome. L’usage de base (cpx <package-name> <command> [arguments]) et le répertoire de cache ~/.cpx sont conservés. La branche 1.x est gelée : ni corrections de bugs ni correctifs de sécurité ne sont prévus.
Pour mettre à niveau, il suffit de réinstaller globalement.
Nouveautés de la v2.0
Priorité aux binaires locaux
Comme npx, si un binaire est déjà installé dans le projet, cpx l’exécute en priorité avant d’envisager d’installer une copie isolée. cpx remonte à partir du répertoire courant pour trouver le projet Composer le plus proche et exécute le binaire correspondant dansvendor/bin (le bin-dir par défaut).
--skip-local.
Exécuter directement un répertoire de package local
Vous pouvez cibler directement le répertoire d’un package Composer en cours de développement pour en exécuter le binaire.composer.json valide et ses dépendances doivent être préalablement installées dans vendor/autoload.php. Dans ce cas, cpx n’exécute pas Composer et ne recopie/ne met pas le package en cache.
cpx exec et cpx tinker
Plusieurs raccourcis sont fournis pour exécuter rapidement du code PHP.
Au sein d’un projet Laravel,
cpx exec amorce complètement l’application, y compris la configuration, les façades et le .env (la variable $app est utilisable). cpx tinker invoque le php artisan tinker du projet lui-même (si laravel/tinker est installé). En dehors, cpx lance directement le shell PsySH.
Dans vos scripts, cpx_require('vendor/package') (renommé depuis composer_require() en 1.x) permet d’autoloader un package à la volée.
Alias
Pour éviter d’avoir à retenir des noms de packages longs, définissez vos propres raccourcis.Mode non interactif et sortie JSON
cpx détecte automatiquement un environnement non interactif via laravel/agent-detector (détection d’agent IA), une redirection de l’entrée standard ou les flags--no-interaction / -n. Dans ce mode, les commandes internes de gestion comme installed, aliases, alias, unalias, clean ou update renvoient une seule ligne JSON à la place du texte formaté. Depuis un terminal interactif, l’option --json donne le même résultat.
Principaux changements par rapport à la v1.x (commandes)
Pages associées
Le cache dans~/.cpx et les anciennes versions de packages sont migrés automatiquement vers le nouveau format ; cependant, les packages exécutés avec une contrainte de version sont gérés sous un nouveau nom de répertoire, ce qui déclenche une réinstallation lors de la première utilisation. Les copies devenues obsolètes issues de la v1.x peuvent être supprimées avec cpx clean.
Dépôt laravel/cpx
Le code source et le README à jour.
Guide de mise à niveau cpx 2.0
Marche à suivre détaillée pour passer de la 1.x à la 2.x.