2 podręczniki o gulp mówią, że muszę najpierw zainstalować gulp globalnie (z flagą -g), a potem jeszcze raz lokalnie. Dlaczego tego potrzebuję?
2 podręczniki o gulp mówią, że muszę najpierw zainstalować gulp globalnie (z flagą -g), a potem jeszcze raz lokalnie. Dlaczego tego potrzebuję?
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.
npx
Narzędzie powiązane z npm
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 od npx
). Na przykład, jeśli chcesz wywołać lokalnie zainstalowany eslint
, możesz:
npx eslint .
W przypadku użycia w script
polu pliku package.json npm
wyszukuje node_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):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
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ż, że gulp
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.
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.
./node_modules/.bin/gulp
.
gulp
i coffee
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łędzie Local 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 :
Powodem tego jest to, że
gulp
próbuje uruchomićgulpfile.js
twoją lokalnie zainstalowaną wersjęgulp
, patrz tutaj . Stąd przyczyna globalnej i lokalnej instalacji gulp.
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 uruchomienia gulpfile.js
.
gulp
pakiet jest potrzebny do postawienia node_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
npm link gulp
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 oraz install --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.
Technicznie nie musisz instalować go globalnie, jeśli node_modules
folder w instalacji lokalnej znajduje się w twoim PATH
. Zasadniczo nie jest to dobry pomysł.
Alternatywnie, jeśli npm test
referencje gulp
, 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.
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.
Tylko dlatego, że nie widziałem go tutaj, jeśli korzystasz z systemu MacOS lub Linux, sugeruję dodanie tego do PATH (w bashrc itp.):
node_modules/.bin
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.