J'ai un rapport Lerna pour un projet en développement. Il a plusieurs paquets qui dépendent les uns des autres. Pour faciliter le développement, aucun des packages n'est publié et ils dépendent de la dernière version les uns des autres.
Arborescence
foo/
packages/
core/
package.json
errors/
package.json
foo/packages/core/package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
J'ai un autre projet, bar
, que j'utilise pour tester le projet Lerna. Actuellement, je relie à ses dépendances en utilisant une dépendance locale file:
:
bar/package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
Cette approche m'a donné un monde de problèmes.
yarn install
dans bar
. Yarn suit la dépendance file:
à @foo/core
, constate qu'elle dépend de @foo/errors
et ignore le lien symbolique de lerna. Cela provoque son échec, en me disant qu'il ne peut pas trouver @foo/errors
.Cela a rendu l'écriture du code réel de ce projet secondaire à ce fouillis de gestion des dépendances.
Comment puis-je faire en sorte que cette structure de projet (je me sens assez simple?) Fonctionne? Ouvrir à lerna/yarn/npm/pnpm/scripts Shell/MS DOS à ce stade.
Pouvez-vous déplacer votre lerna dans un répertoire qui contient à la fois "foo" et "bar"?
root/
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
lerna.json
Et dans votre fichier Lerna, vous pouvez ajouter vos pensions aux paquets
{
"lerna": "2.9.0",
"packages": [
"foo/packages/*",
"bar/",
],
}
Utilisation peut essayer comme ça:
foo/packages/core/package.json
{
...
dependencies: {
"@foo/errors": "file:../errors"
}
}
bar/package.json
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}
Vous devriez pouvoir accomplir ceci avec npm link
. Bien que je n'aie pas essayé d'utiliser une dépendance locale non publiée sur npm.
Arbre de répertoire
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
foo/packages/core/package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
bar/package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
Lancer les commandes suivantes
cd foo
npx lerna clean
npx lerna bootstrap --hoist
npm run build # command to build your projects
cd packages/core
npm link
cd ../../../bar
npm i
npm link @foo/core
La suppression des fichiers package-lock.json fait généralement plus de mal que de bien! Et pour ne pas pouvoir trouver @foo/errors
, si vous avez exécuté l'amorçage npm, @foo/core
devrait être lié symboliquement à @foo/errors
. Une possibilité pourrait être que vos scripts Lerna utilisent npm pendant que vous exécutiez install/link with yarn.