2016-04-07 19 views
6

W Reactach i innych frameworkach często używa się npm i package.json do instalowania bibliotek, których będziesz używać w interfejsie. Jeśli tworzysz aplikację uniwersalną/izomorficzną, wprowadza to problem, że zależności dla frontendu i zaplecza są przechowywane w tym samym pliku, tworząc ogromną listę zależności.Porządkowanie zależności pakietu pack.json w aplikacjach uniwersalnych/izomorficznych

Jeśli użyjesz npm --save/- save-dev, oba typy zależności (frontend, backend) zmieszają się i trudno je poznać, bez przechodzenia jeden po drugim, który z nich jest używany gdzie.

Oprócz sortowania i zarządzania listą zależności ręcznie, czy istnieje sposób na uporządkowanie listy? Jakie są twoje strategie zarządzania listami zależności?

+0

Czy jest coś w takich przykładach jak ten, którego nie lubisz https://github.com/erikras/react-redux-universal-hot-example? – azium

+1

Dotyczy to głównie organizacji zależności i zależności. Listy te stają się masywne i trudno jest je śledzić podczas aktualizacji i czyszczenia nieużywanych zależności. – JayC

+0

Rozważ użycie Bower do zarządzania zależnościami front-end. Pochodzi z własnymi strukturami niezależnymi od npm. – Joe

Odpowiedz

2

W aplikacji uniwersalnej/izomorficznej będziesz prawdopodobnie miał kilka zależności, które są czysto frontendowe lub czysto backendowe; większość zależności są udostępniane.

Opcja, która przychodzi mi do głowy jest użycie więcej niż jednego package.json:

  • jeden dla izomorficzna zależnościami (zareagować, Redux, etc.) i zależnościami użytkowych, takich jak system budowlanej (Babel WebPack, etc. .), biegacze zadań (łyk, cross-env), testowanie (karma) i tak dalej;
  • jeden dla czystych zależności frontendowych;
  • jeden dla czystych zależności zależności.

Nie używałem tej struktury siebie, i nie jestem pewien, że będzie to bardziej linkujących, że pojedyncza package.json, bo będziesz musiał zarządzać więcej rzeczy (a jeśli dodać do NPM-shrinkwrap to, jest dwa razy więcej plików).

1

Zdecydowanie zgadzam się z odpowiedzią sompylasar i chcę nieco dalej ją rozwinąć. Naprawdę uważam, że dwa różne pliki package.json to jedyny sposób na zrobienie tego.

Pomyśl o swoim interfejsie i zapleczu jako dwóch różnych aplikacjach. W dwóch bardzo różnych środowiskach, a także Twoje potrzeby związane z opakowaniami i łańcuchem dostaw również będą różne.

Cały punkt NPM to posiadanie izolowanych zależności w pakiecie. Sprzeciwiacie się temu, dzieląc swoją listę zależności z dwiema zupełnie niezwiązanymi ze sobą aplikacjami (frontend i backend).

Wyobraź sobie zatrudnianie nowych programistów i chcą uaktualnić niektóre pakiety front end, teraz muszą jechać dalej i dowiedzieć się, jak uruchomić i przetestować backend, ponieważ mogą coś zepsuć.

Może się wydawać, że na początku trudno jest zarządzać dwoma plikami package.json, ale ten rodzaj izolacji sprawi, że aplikacja będzie przy zdrowych zmysłach.

Jako taki, polecam strukturę, w której masz dwa foldery rodzeństwa z każdym swoim własnym package.json. Dokładnie, w jaki sposób chcesz stworzyć strukturę, która należy do Ciebie.

Jeśli masz podstawową logikę biznesową, którą chcesz udostępnić między frontendem a backendem, to z kursu możesz to zrobić w osobnym pakiecie npm, który możesz następnie odnieść w pakiecie backend i frontend jako zależność. Możesz użyć wersji npm link, aby rozwijać się w tej samej wersji jednocześnie na przednim i wewnętrznym panelu, aby zapewnić komfort pracy.

+0

To prawda, ale nie dla kwestionowanych aplikacji izomorficznych/uniwersalnych, w których backend (ten, który generuje kod HTML po stronie serwera, a nie ten z bazą danych lub interfejsem API), wykorzystuje prawie każdą zależność, ponieważ wewnętrznie aplikacja izomorficzna/uniwersalna wykorzystuje prawie wszystkie moduł po stronie przeglądarki po stronie serwera (nie tylko "podstawowa logika biznesowa", ale wszystkie widoki i zarządzanie stanem interfejsu użytkownika). – sompylasar