Jak uniknąć instalacji pakietów w monorepo przy użyciu Yarn

10

Zbudowałem monorepo przy użyciu obszarów roboczych Lerna i Yarn .

Wszystko działa dobrze, ale za każdym razem, gdy instaluję nową zależność od pakietu (nazwijmy go A ), używając:

yarn add <package_name>

Yarn dodaje go, a następnie uruchamia installskrypt wszystkich pakietów w monorepo, nawet tych, na których A nie polega.

Czy mimo to można tego uniknąć? Instalacja zajmuje kilka chwil bez żadnego powodu.

Erazihel
źródło
Więc użyłeś obu pakietów Lerna i Yarn? Dlaczego nie tylko Lerna? Czy próbowałeś także dodać pakiet z Lerną i ustawić zakres? github.com/lerna/lerna/tree/master/commands/add
kbariotis
Używam Lerny do publikowania i wersji moich pakietów i obszarów roboczych Yarn, aby łatwo zarządzać zależnościami. Wypróbowałem twoją sugestię i to nie zadziałało. Dziękujemy za próbę :)
Erazihel

Odpowiedzi:

4

Spróbuj dodać do określonego obszaru roboczego za pomocą:

yarn workspace <workspace_name> add <package_name>

Niektóre dokumenty znajdziesz tutaj

Ezrqn Kemboi
źródło
Nie chcę instalować zależności w całym obszarze roboczym, ale tylko w jednym pakiecie
Erazihel
4

Można spróbować z przędzy 2 nodeLinker: node-modulesw .yarnrc.yml. Przędza 2 gwarantuje uruchomienie przebudowy tylko dla pakietów, które zmieniły swoje zależności, nie jest to gwarantowane przez Przędzę 1. Jednak nadal będzie bardzo rzadki przypadek, gdy pozornie niezwiązane pakiety zostaną odbudowane, jeśli zostaną podniesione inaczej po dodaniu nowego pakietu , ale zdarza się to bardzo rzadko.

Viktor Vlasenko
źródło
Próbowałem twojej sugestii, ale wydaje się, że niestety wynik jest nadal taki sam ...: /
Erazihel
4

Za pomocą zakresu dodaj pakiet do konkretnego modułu.

lerna add some_package_1 --scope=some_module_x

Więcej: https://github.com/lerna/lerna/tree/master/commands/add#readme

xdeepakv
źródło
Tak sugerował @kbariotis w komentarzu do mojego pytania. Próbowałem i wynik jest nadal taki sam.
Erazihel
czy możesz zaktualizować jeden z package.json
xdeepakv
Zrobiłem i po raz kolejny wynik jest taki sam
Erazihel