portless - un outil qui remplace les numéros de port par des URL `.localhost` basées sur des noms
(github.com/vercel-labs)- Utilitaire open source de Vercel Labs qui résout les conflits de ports en développement local et la corvée de devoir se souvenir du port utilisé
- Attribue à chaque serveur de développement un sous-domaine
app.localhostunique, offrant un système d’URL compréhensible à la fois par les humains et les agents IA
Avecnext dev, on utilisehttp://localhost:3000et il faut donc se souvenir de 3000
Mais avecportless myapp next dev, on peut accéder à l’application viahttp://myapp.localhost:1355
En l’exécutant commeportless api.myapp pnpm start, l’accès par sous-domaine est aussi pris en charge viahttp://api.myapp.localhost:1355 - Fonctionne avec une architecture basée sur un proxy, où
portless proxyroute centralement les requêtes- Au lancement d’une app, le proxy démarre automatiquement, et chaque app se voit attribuer un port aléatoire (4000–4999)
- La plupart des frameworks (Next.js, Express, Nuxt, etc.) reconnaissent automatiquement la variable d’environnement
PORT - Pour certains frameworks comme Vite et Astro, la compatibilité est assurée grâce à une injection automatique de flags
- Prend en charge HTTP/2 et HTTPS pour des chargements de page plus rapides et des communications locales sécurisées
- Les navigateurs limitent HTTP/1.1 à 6 connexions par hôte
- Ce qui dégrade les performances des serveurs de développement qui servent de nombreux fichiers non bundlés, comme Vite/Nuxt
- HTTP/2 multiplexe toutes les requêtes sur une seule connexion
- Génération automatique de certificats et enregistrement dans le magasin de confiance du système
- Des certificats personnalisés peuvent aussi être appliqués avec les options
--certet--key
- Les navigateurs limitent HTTP/1.1 à 6 connexions par hôte
- Fournit une interface CLI centrée sur les commandes
portless <name> <cmd>: lance une app avec le nom indiquéportless list: affiche la liste des routes activesportless proxy start/stop: contrôle le proxy- Il est possible de contourner le proxy avec la variable d’environnement
PORTLESS=0
- Stocke les informations de routes et de PID via un répertoire de gestion d’état
- En mode utilisateur normal, utilise
~/.portless, et en mode root,/tmp/portless - Le chemin peut être redéfini avec
PORTLESS_STATE_DIR
- En mode utilisateur normal, utilise
- Lors de la configuration d’un proxy API avec Vite, webpack-dev-server etc., il faut réécrire l’en-tête
Host- En cas de mauvaise configuration, une réponse
508 Loop Detectedindique le problème
- En cas de mauvaise configuration, une réponse
- Compatible avec Node.js 20 ou supérieur, sur macOS et Linux
- Monorepo basé sur pnpm + Turborepo
- Licence Apache-2.0, codebase TypeScript (environ 74 %)
7 commentaires
Mise à jour avec prise en charge des worktrees
https://github.com/vercel-labs/portless/releases/tag/v0.5.2
Désormais, l’outil détecte automatiquement les worktrees et ajoute le nom de la branche devant l’hôte
Comme cela ne s’accorde pas très bien avec les worktrees d’un même projet, je ne l’utilise pas.
Je pensais que l’attribution se faisait automatiquement, mais en fait il faut simplement les enregistrer manuellement.
J’utilise Caddy, donc je ne vois pas vraiment de raison de passer à ça.
J’utilisais déjà ça avec docker + traefik + mkcert, mais utiliser ça a l’air plus pratique.
Article utile.
On peut enfin dire adieu à l’erreur EADDRINUSE ?
En ce moment, comme on développe toutes sortes de trucs via des agents et qu’on lance un peu tout n’importe comment, ça finit par se rentrer dedans entre eux et c’est vite le bazar haha
Comme cela a été évoqué sur X, apparemment si vous l’utilisez avec Docker, cela fonctionne aussi à condition de fournir de force le PID du démon Docker.
https://github.com/vercel-labs/portless/issues/61