2012-07-12 13 views
15

Sprawdzanie w module node_module było standardem wspólnotowym, ale teraz mamy również opcję użycia shrinkwrap. Ta druga ma dla mnie więcej sensu, ale zawsze istnieje szansa, że ​​ktoś "wymusił publikację" i wprowadził błąd. Czy są jakieś dodatkowe wady?Sprawdź moduł node_modules vs. shrinkwrap

Odpowiedz

16

Mój ulubiony post/filozofia na ten temat idzie całą drogę powrotną (długi czas w node.js gruntu) do 2011 roku:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

Cytując bezpośrednio:

Jeśli masz aplikację, którą wdrażasz, sprawdzasz wszystkie zależności w module node_modules. Jeśli używasz npm do wdrożenia, definiuj tylko bundleDependencies dla tych modułów. Jeśli masz zależności, które wymagają kompilacji, powinieneś sprawdzić kod i po prostu uruchomić ponowne odtworzenie $ npm podczas wdrażania.

Każdy, kogo powiedziałem, mówi mi, że jestem idiotą, a kilka tygodni później mówi mi, że miałem rację, a sprawdzenie modułu node_modules było błogosławieństwem dla wdrożenia i rozwoju. Jest obiektywnie lepszy, ale oto niektóre z pytań/skarg, które wydaje mi się uzyskać.

Myślę, że to wciąż najlepsza rada.

Scenariusz force-publish jest rzadki i prawdopodobnie większość osób będzie pracowała pod npm shrinkwrap. Ale jeśli wdrażasz środowisko produkcyjne, nic nie daje ci spokoju ducha, jak sprawdzanie w całym katalogu node_modules.

Alternatywnie, jeśli naprawdę nie chce, by sprawdzić w katalogu node_modules ale chcą lepszą gwarancję, że nie był zmuszony Push, będę stosować się do zaleceń w npm help shrinkwrap:

Jeśli chcesz uniknąć ryzyka, że ​​autor bizantyjski zastąpi pakiet, którego używasz z kodem, który łamie twoją aplikację, możesz zmodyfikować plik shrinkwrap, aby używał referencji do URL-a git zamiast numerów wersji, aby npm zawsze pobierał wszystkie pakiety z git.

Oczywiście, ktoś może uruchomić dziwne git rebase lub coś w tym stylu i zmodyfikować hash zatwierdzenia git ... ale teraz po prostu wariujemy.

+1

dzień dzisiejszy, że link jest uszkodzony (błąd 500), tak tutaj jest [archiwum] (https://gist.github.com/3854887) (gist.github. com/3854887) tego posta. – Sukima

+0

@Sukima Wierzę, że łącze działa i działa. – Kostia

+1

Jeśli autorzy usuwają swoje paczki, co się dzieje, "shrinkwrap" nie pomoże. –

2

npm FAQ bezpośrednio odpowiada na to:

  • Sprawdź node_modules do git do rzeczy, wdrażanie, takich jak strony internetowe i aplikacji.
  • Nie sprawdzaj modułu node_modules w git dla bibliotek i modułów przeznaczonych do ponownego użycia.
  • Użyj polecenia npm do zarządzania zależnościami w środowisku dev , ale nie w skryptach wdrażania.

cytowane z npm FAQ

+3

Nawet najczęstsze pytania mogą się zmienić. Teraz brzmi: "W przypadku pakietów, które wdrażasz, takich jak witryny i aplikacje, powinieneś użyć npm shrinkwrap, aby zablokować pełne drzewo zależności". – Johann

Powiązane problemy