@john-heshima/yalc-plus
v0.2.0
Published
Local package workflow with immutable store and hardlinks
Readme
yalc-plus
Avec yalc, on se heurte vite aux lenteurs liées aux copies répétées de gros dossiers, aux limites des symlinks dans certains environnements (ex. Metro/React Native), et au manque de traçabilité fine des révisions installées. yalc-plus reprend l'idée du workflow local mais la pousse plus loin : il publie des révisions immuables dans un store dédié, installe via hardlinks quand c'est possible (ou copie sinon), et rend les mises à jour plus rapides, plus fiables et plus prévisibles.
En une phrase
yalc-plus remplace le cycle pénible "build → publier → réinstaller" par un flux local rapide, fiable et reproductible, idéal pour itérer sur une librairie et la consommer dans plusieurs apps sans repacker tout le projet à chaque fois.
Pourquoi l'utiliser
- Accélère les boucles de dev en évitant des copies intégrales de dossiers volumineux.
- Garantit des révisions immuables, donc des installs reproductibles et traçables.
- Évite les problèmes de symlinks et de bundlers (React Native/Metro) en installant des fichiers normaux.
- Fonctionne bien en monorepo comme en multi-repos.
Comment ça marche (concepts clés)
- Store immuable : chaque publication locale crée une révision stockée dans
~/.yalc-plus. - Hardlinks quand possible : si le store et l'app sont sur le même device, l'installation utilise des hardlinks (ultra rapide et sans duplication réelle).
- Fallback automatique : si le hardlink n'est pas possible,
yalc-pluscopie les fichiers. - Traçabilité : chaque app reçoit un
yalc-plus.lockpour savoir exactement quelle révision est installée. - Détection Metro : un fichier
.yalc-plus-stampest touché pour forcer la détection de changements.
Installation
npm i -g @john-heshima/yalc-plus
# ou
npx yalc-plus --helpWorkflow rapide
# Dans la lib
yalc-plus publish --push
# Dans l'app
yalc-plus add <pkg>
# Retour dans la lib
yalc-plus watch --pushCommandes
yalc-plus doctoryalc-plus publish [--package <path>] [--no-build] [--push] [--apps <globs>]yalc-plus add <pkgName> [--app <path>] [--link-mode hardlink|copy]yalc-plus push <pkgName> [--apps <paths>] [--all]yalc-plus remove <pkgName> [--app <path>] [--clean]yalc-plus watch [--package <path>] [--apps <paths>] [--debounce <ms>]yalc-plus packlist
Différences avec yalc (détaillé)
- Store immuable par révision : chaque
publishcrée une révision unique, immuable et traçable. Cela évite les états flous où un même package "change" sur place. - Fichiers normaux (pas de symlinks) : l'installation se fait via hardlinks ou copies réelles, ce qui réduit les soucis avec des outils sensibles aux symlinks (ex. Metro).
- Optimisation des gros packages : grâce aux hardlinks, un package volumineux n'est pas recopié entièrement à chaque fois, ce qui réduit drastiquement le temps d'installation et l'usage disque.
- Compatibilité device-aware : si le store et le projet ne sont pas sur le même device,
yalc-plusbascule automatiquement en mode copie. - Signaux de changement : le
.yalc-plus-stampfacilite la détection de modifications côté bundler, évitant des redémarrages manuels trop fréquents.
Dépannage Metro
Après des updates, Metro peut nécessiter un reset de cache:
expo start --clear
# ou
npx react-native start --reset-cacheyalc-plus touche node_modules/<pkg>/.yalc-plus-stamp pour aider Metro à détecter les changements.
Notes
yalc-plus.lockest écrit dans chaque app pour tracer les packages et révisions installés.- Les hardlinks ne sont utilisés que si le store et l'app sont sur le même device.
