npm pozwala nam określić bundledDependencies
, ale jakie są zalety takiego działania? Wydaje mi się, że jeśli chcemy mieć absolutną pewność, że otrzymamy odpowiednią wersję, nawet jeśli moduł, do którego się odwołujemy, zostanie usunięty, czy może istnieje korzyść związana z szybkością tworzenia pakietów?
Czy ktoś zna zalety bundledDependencies
ponad normalnych zależności?
node.js
npm
dependencies
balupton
źródło
źródło
Odpowiedzi:
Jednym z największych obecnie problemów z Node jest szybkość zmian. Oznacza to, że systemy produkcyjne mogą być bardzo delikatne i
npm update
mogą łatwo zepsuć rzeczy.Korzystanie z bundledDependencies jest sposobem na obejście tego problemu poprzez zapewnienie, jak słusznie przypuszczasz, że zawsze będziesz dostarczać poprawne zależności, bez względu na to, co jeszcze może się zmienić.
Możesz również użyć tego do spakowania własnych, prywatnych pakietów i dostarczenia ich podczas instalacji.
źródło
npm update
że nie wpłynie to na żadne zależności w bundledDependencies?Dla czytelnika : takontrolajakości dotyczy pola package.json bundledDependencies, a nie samego pakietu .
Co robią bundledDependencies
„BundledDependencies” jest dokładnie tym, co sugeruje ich nazwa. Zależności, które powinny znajdować się w Twoim projekcie. Więc funkcjonalność jest w zasadzie taka sama jak normalne zależności. Będą również spakowane podczas biegu
npm pack
.Kiedy ich używać
Zwykłe zależności są zwykle instalowane z rejestru npm. W ten sposób powiązane zależności są przydatne, gdy:
W ten sposób nie musisz tworzyć (i utrzymywać) własnego repozytorium npm, ale uzyskasz te same korzyści, które otrzymujesz z pakietów npm.
Kiedy nie używać dołączonych zależności
Podczas programowania nie sądzę jednak, aby głównym celem było zapobieganie przypadkowym aktualizacjom. Mamy do tego lepsze narzędzia, a mianowicie repozytoria kodu (git, mercurial, svn ...) lub teraz pliki blokujące.
Aby przypiąć wersje pakietów, możesz użyć:
Opcja 1: Użyj nowszej wersji NPM 5, która jest dostarczana z węzłem 8. Używa
package-lock.json
pliku (zobacz blog węzła i wydanie węzła 8)Opcja 2: użyj przędzy zamiast
npm
. Jest to menedżer pakietów z Facebooka, szybszy niżnpm
i używayarn.lock
pliku. Wpackage.json
przeciwnym razie używa tego samego .npm
w rzeczywistości skopiował tę funkcjęyarn
, między innymi.npm shrinkwrap
większość czasu, a czasami umieszczać całość, w tym folder node_module, w repozytorium kodu. Lub ewentualnie użyj shrinkpack . Najlepsze praktyki w tamtym czasie zostały omówione na blogu node.js oraz na radosnych witrynach deweloperskich .Zobacz też
To trochę wykracza poza zakres pytania, ale chciałbym wspomnieć o ostatnim rodzaju zależności (o których wiem): zależności równorzędnych . Zobacz także to powiązane pytanie SO i prawdopodobnie dokumentację
yarn
dotyczącą bundledDependencies .źródło
npm install -g shrinkpack
narzędzia.Inną zaletą jest to, że możesz umieścić tam swoje wewnętrzne zależności (komponenty aplikacji), a następnie po prostu wymagać ich w swojej aplikacji tak, jakby były niezależnymi modułami, zamiast zaśmiecać bibliotekę / i publikować je w npm.
Jeśli / kiedy dojrzeją do tego stopnia, że mogą żyć jako oddzielne moduły, możesz je łatwo umieścić na npm, bez modyfikowania kodu.
źródło
Dziwię się, że nie widziałem tego już tutaj, ale po starannym wybraniu
bundledDependencies
można go użyć do stworzenia pakietu dystrybucyjnego,npm pack
który będzie działał na systemie, w którymnpm
nie jest skonfigurowany. Jest to przydatne, jeśli masz np. System, który nie jest podłączony do sieci / nie jest w Internecie: przenieś swój pakiet na pendrive (lub cokolwiek innego) i rozpakuj archiwum, wtedynpm run
lubnode index.js
i po prostu działa.Może jest lepszy sposób na spakowanie aplikacji, aby działała „offline”, ale jeśli tak, to nie znalazłem.
źródło
Pod względem operacyjnym patrzę na bundledDependencies jako na prywatny magazyn modułów modułu, w którym zależności są bardziej publiczne, rozwiązane wśród twojego modułu i jego zależności (i zależności podrzędnych). Twój moduł może polegać na starszej wersji, powiedzmy, reaguj, ale zależność wymaga najnowszego i najlepszego. Twój pakiet / instalacja spowoduje, że Twoja przypięta wersja zostanie wprowadzona
node_modules/$yourmodule/node_modules/react
, podczas gdy Twoja zależność otrzyma swoją wersjęnode_modules/react
(lubnode_modules/$dependency/node_modules/react
jeśli są tak skłonni).Ostrzeżenie: ostatnio natknąłem się na zależność, która nie skonfigurowała poprawnie swojej zależności od reagowania, a reagowanie w bundledDependencies spowodowało awarię tego zależnego modułu w czasie wykonywania.
źródło