2 podręczniki o gulp mówią, że muszę najpierw zainstalować gulp globalnie (z flagą -g), a potem jeszcze raz lokalnie. Dlaczego tego potrzebuję?
javascript
gulp
Stepan Suworow
źródło
źródło
Odpowiedzi:
Podczas instalowania narzędzia globalnie, może być używane przez użytkownika jako narzędzie wiersza polecenia w dowolnym miejscu, w tym poza projektami węzłów. Globalne instalacje dla projektu węzła są złe, ponieważ utrudniają wdrożenie.
npm 5.2+
npx
Narzędzie powiązane znpm
5.2
rozwiązuje ten problem. Za jego pomocą możesz wywoływać narzędzia zainstalowane lokalnie, takie jak narzędzia zainstalowane globalnie (ale musisz rozpocząć polecenie odnpx
). Na przykład, jeśli chcesz wywołać lokalnie zainstalowanyeslint
, możesz:npm <5.2
W przypadku użycia w
script
polu pliku package.jsonnpm
wyszukujenode_modules
narzędzie, a także moduły zainstalowane globalnie, więc instalacja lokalna jest wystarczająca.Więc jeśli jesteś zadowolony z (w pakiecie.json):
itd. i działając z
npm run test
tym czasem nie powinieneś w ogóle potrzebować instalacji globalnej.Obie metody przydają się do skonfigurowania projektu, ponieważ
sudo
nie są potrzebne. Oznacza to również, żegulp
zostanie zaktualizowany, gdy wersja zostanie zderzona z pakietem.json, więc wszyscy będą używać tej samej wersji gulp podczas programowania z twoim projektem.Uzupełnienie:
Wygląda na to, że łyk zachowuje się nietypowo, gdy jest stosowany na całym świecie. Gdy jest używany jako instalacja globalna, gulp szuka lokalnie zainstalowanego gulpa, aby przekazać kontrolę. Dlatego globalna instalacja gulp wymaga do działania lokalnej instalacji gulp. Powyższa odpowiedź jest jednak nadal aktualna. Lokalne instalacje są zawsze lepsze niż instalacje globalne.
źródło
./node_modules/.bin/gulp
.gulp
icoffee
tak komendy pracować z mojego korzenia projektu węzła (np.alias gulp="node_modules/.bin/gulp"
). W ten sposób polecenia są łatwe w użyciu w razie potrzeby i nie występują globalne / lokalne konflikty wersji.gulp
, wyświetla mi się następujący komunikat o błędzieLocal gulp not found in ...
. O ile rozumiem, powinien on najpierw spojrzeć na lokalne moduły_węzła, a jeśli nie zostanie znaleziony, powinien następnie zajrzeć do globalnie zainstalowanych modułów, prawda? Dzięki!TLDR; Oto dlaczego :
Zasadniczo, gdy instalujesz
gulp
lokalnie, skryptu nie ma w twoim,PATH
więc nie możesz po prostu pisaćgulp
i oczekiwać, że powłoka znajdzie polecenie. Instalując go globalnie,gulp
skrypt dostaje się do twojego,PATH
ponieważnode/bin/
najprawdopodobniej katalog globalny jest na twojej ścieżce.Aby jednak uszanować lokalne zależności,
gulp
użyje zainstalowanej lokalnie wersji do uruchomieniagulpfile.js
.źródło
gulp
pakiet jest potrzebny do postawienianode_modules/.bin/gulp
ścieżki. Pamięć masowa jest tania, ale wyrzucenie MB w celu symulacji dowiązania symbolicznego jest IMO czystą niechlujnością.Możesz połączyć globalnie zainstalowany
gulp
lokalnie zźródło
npm link
.Pytanie „ Dlaczego musimy instalować gulp globalnie i lokalnie? ” Można podzielić na następujące dwa pytania:
Dlaczego muszę instalować gulp lokalnie, jeśli już go zainstalowałem globalnie?
Dlaczego muszę instalować gulp globalnie, jeśli już go zainstalowałem lokalnie?
Kilka innych udzieliło doskonałych odpowiedzi na te pytania w oderwaniu, ale pomyślałem, że korzystne byłoby skonsolidowanie informacji w ujednoliconej odpowiedzi.
Dlaczego muszę instalować gulp lokalnie, jeśli już go zainstalowałem globalnie?
Uzasadnienie lokalnego instalowania łyka składa się z kilku powodów:
Dlaczego muszę instalować gulp globalnie, jeśli już go zainstalowałem lokalnie?
Aby uniknąć instalacji lokalnej, możesz użyć tej opcji
npm link [package]
, ale polecenie link orazinstall --global
polecenie wydają się nie obsługiwać tej--save-dev
opcji, co oznacza, że nie wydaje się, aby istniał łatwy sposób na zainstalowanie gulp globalnie, a następnie łatwe dodanie dowolnej wersji, która ma być twój lokalny plik package.json.Ostatecznie uważam, że sensowniej jest mieć opcję korzystania z globalnych modułów, aby uniknąć konieczności duplikowania instalacji wspólnych narzędzi we wszystkich projektach, szczególnie w przypadku narzędzi programistycznych, takich jak chrząknięcie, gulp, jshint itp. Niestety to wygląda na to, że kończysz walkę z narzędziami, gdy idziesz pod prąd.
źródło
Technicznie nie musisz instalować go globalnie, jeśli
node_modules
folder w instalacji lokalnej znajduje się w twoimPATH
. Zasadniczo nie jest to dobry pomysł.Alternatywnie, jeśli
npm test
referencjegulp
, możesz po prostu wpisać,npm test
a uruchomi się lokalny łyk.Nigdy nie instalowałem gulp na całym świecie - myślę, że to zła forma.
źródło
Nie jestem pewien, czy nasz problem był bezpośrednio związany z instalowaniem gulp tylko lokalnie. Ale musieliśmy sami zainstalować wiele zależności. Doprowadziło to do powstania „ogromnego” pakietu.json i nie jesteśmy pewni, czy naprawdę dobrym pomysłem jest instalowanie gulp tylko lokalnie. Musieliśmy to zrobić ze względu na środowisko kompilacji. Ale nie poleciłbym instalowania gulpa nie na całym świecie, jeśli nie jest to absolutnie konieczne. Napotkaliśmy podobne problemy, jak opisano w poniższym poście na blogu
Żaden z tych problemów nie pojawia się u żadnego z naszych programistów na ich lokalnych komputerach, ponieważ wszyscy zainstalowali gulp na całym świecie. W systemie kompilacji mieliśmy opisane problemy. Jeśli ktoś jest zainteresowany, mógłbym głębiej zagłębić się w tę kwestię. Ale teraz chciałem tylko wspomnieć, że nie jest to łatwa ścieżka do instalacji gulp tylko lokalnie.
źródło
Tylko dlatego, że nie widziałem go tutaj, jeśli korzystasz z systemu MacOS lub Linux, sugeruję dodanie tego do PATH (w bashrc itp.):
Dzięki temu względnemu wpisowi ścieżki, jeśli siedzisz w folderze głównym dowolnego projektu węzła, możesz uruchomić dowolne narzędzie wiersza poleceń (eslint, gulp itp.) Bez obawy o „globalne instalacje”
npm run
itp.Gdy to zrobiłem, nigdy nie instalowałem modułu globalnie.
źródło