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 →
Configuration des fichiers publiés
Lors de la publication d'un paquet dans un registre, par défaut, tous les fichiers du répertoire source sont inclus. Cette approche n'est pas toujours optimale, car certains fichiers comme les tests ou les configurations sont uniquement pertinents pour le développement. De plus, dans un environnement monorepo, vous pouvez compiler vos sources et placer les résultats dans un emplacement centralisé.
Lerna propose plusieurs options de configuration pour garantir que seuls les fichiers appropriés sont empaquetés et publiés dans un registre.
"files" et .gitignore
Lerna utilise toujours les outils npm pour la publication, qui offrent plusieurs mécanismes intégrés pour inclure ou exclure des fichiers. Le moyen le plus simple de configurer les fichiers inclus consiste à utiliser la propriété "files" dans package.json et le fichier .gitignore. Consultez la documentation npm pour plus de détails sur le traitement des fichiers.
--contents [obsolète → privilégiez --directory]
Plusieurs commandes, dont lerna publish, prennent en charge l'option générale --contents qui définit le répertoire de publication pour TOUS les paquets.
Cette option n'est utile que si vos paquets ont une structure de sortie uniforme et simpliste. L'argument de --contents doit correspondre à un sous-répertoire présent dans chaque paquet publié. Voir la documentation de lerna publish pour plus de détails.
Dans la version 7, nous avons introduit l'option --directory, plus puissante et ciblée pour lerna publish. Privilégiez cette option plutôt que --contents, qui sera probablement dépréciée ultérieurement.
--directory
Dans la version 7, nous avons introduit l'option --directory, plus puissante et ciblée pour lerna publish.
Configurable dans lerna.json, elle prend en charge les marqueurs dynamiques : {workspaceRoot}, {projectRoot}, {projectName}. Ces valeurs sont remplacées dynamiquement lors de la publication.
Vous pouvez ainsi exprimer clairement des configurations cohérentes dans leur logique, sans avoir une structure identique pour tous les paquets.
Prenons l'exemple d'un monorepo où tous les paquets sont compilés vers un emplacement central (comme dans les espaces de travail Nx) :
packages/package-a génère ses résultats dans dist/packages/package-a, tandis que packages/package-b utilise dist/packages/package-b.
Bien que les chemins diffèrent, nous pouvons exprimer cette logique uniforme grâce aux marqueurs :
{workspaceRoot}/dist/{projectRoot}
{workspaceRoot} sera remplacé par le chemin absolu du dépôt Lerna, tandis que {projectRoot} deviendra packages/package-a pour package-a et packages/package-b pour package-b.
Voici comment appliquer cette configuration dans lerna.json :
// lerna.json
{
"version": "1.0.0",
"command": {
"publish": {
"directory": "{workspaceRoot}/dist/{projectRoot}"
}
}
}
Vous pouvez également définir ou surcharger cette option dans le package.json d'un paquet pour une configuration totalement personnalisée.
Exemple de configuration pour un paquet publié depuis le dossier dist/packages/foo à la racine du dépôt :
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/foo"
}
}
}
}
Vous devrez vous assurer que votre répertoire personnalisé contient un package.json valide qui sera utilisé pour la publication dans le registre. Vous pouvez le créer via un script de cycle de vie comme prepare, prepublishOnly ou prepack si vous avez besoin d'une logique personnalisée plus complexe, ou simplement le copier automatiquement depuis la source du package en le configurant comme ressource. Consultez la prochaine section sur Inclure des ressources supplémentaires dans les packages publiés pour plus de détails.
Si vous souhaitez qu'un de vos packages se comporte comme un package Lerna standard et soit publié depuis sa source, vous pouvez surcharger sa configuration de publication ainsi :
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "."
}
}
}
}
Inclure des ressources supplémentaires dans les packages publiés
Lerna peut copier des fichiers depuis votre répertoire source vers le répertoire spécifié pour la publication. Comme pour l'option directory, cela peut être configuré dans le lerna.json (y compris avec des espaces réservés dynamiques dans les définitions de ressources), ou dans le package.json d'un package spécifique.
Quel que soit le fichier de configuration, la propriété "assets" doit être un tableau de motifs glob ou d'objets avec des propriétés "from" et "to". La propriété "from" doit être un fichier spécifique ou un motif glob correspondant à des fichiers du répertoire source, et "to" est le chemin de destination dans le répertoire de publication.
Cet exemple de package génère sa sortie dans le répertoire racine dist/packages/bar. Lerna est configuré pour copier des fichiers supplémentaires dans ce répertoire, puis publie le contenu de dist/packages/bar sur npm.
// packages/bar/package.json
{
"name": "bar",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/bar",
"assets": [
"README.md",
"package.json",
"docs/*.md",
{
"from": "static/images/*",
"to": "assets"
},
{
"from": "../../CONTRIBUTING.md",
"to": "./"
}
]
}
}
}
}
Lerna utilisera cette configuration pour copier les fichiers appropriés dans le répertoire dist, produisant une structure comme suit :
dist/packages/bar
├── assets
│ ├── my-image-1.png
│ └── my-image-2.png
├── CONTRIBUTING.md
├── docs
│ ├── my-doc-1.md
│ └── my-doc-2.md
├── package.json
└── README.md