web-dev-qa-db-fra.com

Autoriser le projet local à dépendre des packages Lerna locaux

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.

  • Avec npm, les erreurs ENOENT .DELETE . Retirer mon paquet-lock.json et le réinstaller m'a pris des années.
  • En utilisant le fil, je n’ai pas pu 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.

15
Jack Guy

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/",
  ],
}
3
Doppio

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" } }

0
Suhosauge

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.

0
jjbskir