Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Versionnage et Publication
Lerna peut incrémenter les versions de vos paquets et les publier sur NPM, en proposant diverses options pour s'adapter à tous les workflows.
Pour illustrer son fonctionnement, nous allons examiner ce dépôt.
Si vous préférez apprendre en pratiquant, clonez le dépôt et suivez les étapes.
Le dépôt contient trois paquets ou projets :
-
header(une bibliothèque de composants React) -
footer(une bibliothèque de composants React) -
remixapp(une application utilisant le framework Remix qui dépend deheaderetfooter)
Nous allons publier les paquets header et footer.
Il est courant de ne publier qu'un sous-ensemble des projets. Certains peuvent être privés (utilisés uniquement pour les tests), d'autres peuvent être des applications de démonstration. Ici,
remixappn'est pas "privé" au sens où son code serait caché, mais utilise simplement le paramètre"private": truepour éviter sa publication sur NPM.
Gestion des versions
Lerna inclut une commande version qui permet d'incrémenter le numéro de version de vos paquets, de valider les modifications et de les étiqueter en conséquence.
lerna version --no-private
vous obtiendrez le résultat suivant :
lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) (Use arrow keys)
❯ Patch (1.0.1)
Minor (1.1.0)
Major (2.0.0)
Prepatch (1.0.1-alpha.0)
Preminor (1.1.0-alpha.0)
Premajor (2.0.0-alpha.0)
Custom Prerelease
Custom Version
Notez qu'en passant --no-private, nous excluons tous les paquets marqués comme private dans leur fichier package.json.
Lerna détecte les paquets actuels, identifie leur version courante et propose la suivante. Vous pouvez aussi spécifier directement une version semver comme lerna version 1.0.0. Plus de détails dans la documentation sur le versionnage. Une fois la version choisie, Lerna met à jour le package.json, valide le changement, ajoute un tag correspondant (ex: v1.0.0) et pousse le commit et le tag vers le dépôt distant.
{
"name": "footer",
"version": "1.0.1",
"main": "dist/index.js",
...
}
Notez que cette opération ne publie pas le paquet sur NPM. Pour que Lerna gère également la publication, utilisez plutôt lerna publish.
Lerna utilise la propriété version dans lerna.json pour déterminer la version courante.
Publication sur NPM
Si nous exécutons
lerna publish --no-private
Lerna exécute le workflow d'incrémentation de version (identique à lerna version) et publie en plus les paquets sur NPM. Vous devriez obtenir ce résultat :
lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) Patch (1.0.1)
Changes:
- footer: 1.0.0 => 1.0.1
- header: 1.0.0 => 1.0.1
? Are you sure you want to publish these packages? Yes
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna info publish Publishing packages to npm...
...
lerna success published header 1.0.1
...
lerna success published footer 1.0.1
...
Successfully published:
- footer@1.0.1
- header@1.0.1
lerna success published 2 packages
from-package
Lerna peut aussi déterminer les paquets à publier via from-package. Il compare la version de chaque paquet dans le dépôt avec sa version publiée sur npm. Pour chaque paquet dont la version locale est supérieure, Lerna le publie sur npm.
Ce mode ne nécessite pas explicitement que les paquets aient été versionnés avec lerna version, ce qui le rend idéal pour les espaces de travail disposant de leurs propres scripts de gestion de versions.
lerna publish from-package
Lerna utilise toujours npm pour publier les paquets. Si vous utilisez un gestionnaire de paquets autre que npm, vous devrez quand même ajouter la configuration de publication appropriée à .npmrc, même si npmClient est défini à autre chose que npm dans lerna.json.
Stratégies de versionnage
Lerna permet de gérer votre projet selon deux modes : Fixe ou Indépendant.
Mode Fixe/Verrouillé (par défaut)
Les projets Lerna en mode fixe fonctionnent sur une seule ligne de version. La version est conservée dans le fichier lerna.json à la racine de votre projet sous la clé version. Lorsque vous exécutez lerna publish, si un package a été mis à jour depuis la dernière version publiée, il sera mis à jour vers la nouvelle version que vous publiez. Cela signifie que vous ne publiez une nouvelle version d'un package que lorsque cela est nécessaire.
Remarque : Si vous avez une version majeure zéro, toutes les mises à jour sont considérées comme des breaking changes. Pour cette raison, exécuter
lerna publishavec une version majeure zéro et choisir un numéro de version non préliminaire entraînera la publication de nouvelles versions pour tous les packages, même si certains n'ont pas changé depuis la dernière publication.
Utilisez ce mode si vous souhaitez lier automatiquement toutes les versions de packages ensemble. Un inconvénient de cette approche est qu'un changement majeur dans n'importe quel package entraînera une nouvelle version majeure pour tous les packages.
Versions synchronisées
Lerna ne versionne et ne publie que les packages modifiés depuis la dernière version, ce qui peut entraîner une divergence progressive des versions. Pour éviter cela, utilisez l'option --force-publish avec lerna version. Cela forcera Lerna à toujours versionner tous les packages, qu'ils aient changé ou non depuis la dernière version. Ils seront ensuite tous publiés dans le registre par lerna publish from-git. Ainsi, toutes les versions de packages resteront synchronisées avec la version dans lerna.json.
Mode indépendant
npx lerna init --independent
Les projets Lerna en mode indépendant permettent aux mainteneurs d'incrémenter les versions de packages indépendamment les unes des autres. À chaque publication, vous serez invité à spécifier pour chaque package modifié s'il s'agit d'un correctif (patch), d'une évolution mineure (minor), majeure (major) ou d'un changement personnalisé.
Le mode indépendant permet de mettre à jour les versions de manière plus granulaire pour chaque package, ce qui est pertinent pour un ensemble de composants. Combiner ce mode avec un outil comme semantic-release simplifierait le processus (des travaux existent déjà sur atlassian/lerna-semantic-release).
Définissez la clé
versiondanslerna.jsonsurindependentpour activer le mode indépendant.