Za pomocą npm możemy instalować moduły globalnie za pomocą -g
opcji. Jak możemy to zrobić w pliku package.json?
Załóżmy, że są to moje zależności w pliku package.json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Kiedy uruchamiam npm install
, chcę node.io
być instalowany tylko globalnie, a pozostałe powinny być zainstalowane lokalnie. Czy jest na to opcja?
"preferGlobal": true
w module package.json dla modułu."preferGlobal":true
... tak naprawdę nie wiem, gdzie umieścić to w package.json. npmjs.org/doc/json.html Dokumentacja NPM mówi, że preferGlobal jest dla twojego własnego pakietu, a to ustawienie sprawi, że zainstaluje twój własny pakiet jako globalny. wydaje się jednak bardziej przewodnikiem.Odpowiedzi:
Nowa uwaga: Prawdopodobnie nie chcesz lub nie musisz tego robić. To, co prawdopodobnie chcesz zrobić, to po prostu umieścić te typy zależności komend dla kompilacji / testu itp. W
devDependencies
sekcji pliku package.json. Za każdym razem, gdy użyjesz czegoś zscripts
pliku package.json, twoje polecenia devDependencies (w node_modules / .bin) działają tak, jakby były na twojej ścieżce.Na przykład:
Następnie w package.json:
Następnie w wierszu polecenia możesz uruchomić:
Ale jeśli ty naprawdę chcesz zainstalować globalnie, możesz dodać preinstalację w sekcji skryptów pliku package.json:
Więc właściwie moja instalacja npm wykonuje ponownie instalację npm .. co jest dziwne, ale wydaje się działać.
Uwaga: możesz mieć problemy, jeśli korzystasz z najczęściej stosowanej konfiguracji, w
npm
której wymagane są instalacje globalnego pakietu węzłówsudo
. Jedną z opcji jest zmiananpm
konfiguracji, aby nie było to konieczne:npm config set prefix ~/npm
, dodaj $ HOME / npm / bin do $ PATH, dołączającexport PATH=$HOME/npm/bin:$PATH
do swojego~/.bashrc
.źródło
npm i -g underscore-cli
. ostrzega przed błędem wd. wd oznacza chyba katalog roboczy. kiedy robię to ręcznie w wierszu poleceń, wszystko idzie dobrze, jednak wolałbym, gdyby użytkownik był w stanie poradzić sobie z instalowaniem mojego kodu za pomocą prostegonpm install
npm list module -g || npm install module -g
jak npm zwróci prawidłowe wartości wyjścia."preinstall" : "scripts/preinstall.sh"
).&&
, na przykładnpm install -g bower && npm install -g grunt-cli
Ze względu na opisane poniżej wady polecam zastosować się do przyjętej odpowiedzi:
Oto moja oryginalna, ale niezalecana odpowiedź.
Zamiast używać instalacji globalnej, możesz dodać pakiet do swojego
devDependencies
(--save-dev
), a następnie uruchomić plik binarny z dowolnego miejsca w projekcie:W Twoim przypadku:
Ten inżynier podał
npm-exec
alias jako skrót. Ten inżynier używa skryptu powłoki o nazwieenv.sh
. Ale wolę używać$(npm bin)
bezpośrednio, aby uniknąć dodatkowego pliku lub konfiguracji.Mimo że każde połączenie jest nieco większe, powinno po prostu działać , zapobiegając:
sudo
Niedogodności:
$(npm bin)
nie będzie działać w systemie Windows.npm bin
folderze. (Zainstaluj npm-run lub npm-które, aby je znaleźć).Wydaje się lepszym rozwiązaniem jest umieszczenie typowych zadań (takich jak budowa i minifying) w sekcji „scripts” waszego
package.json
, jak pokazuje Jason powyżej.źródło
.bashrc
łatwo dodaćbin/
katalog doPATH
zmiennej środowiskowej:alias nodebin='export PATH=$(npm bin)/:$PATH'
. Wykonaj,nodebin
a następnie możesz po prostu wpisać swoje polecenia jak zwykle.Jest to trochę stare, ale natrafiłem na wymóg, więc oto rozwiązanie, które wymyśliłem.
Problem:
Nasz zespół programistów utrzymuje wiele aplikacji internetowych .NET, które migrujemy do AngularJS / Bootstrap. VS2010 nie nadaje się łatwo do niestandardowych procesów kompilacji, a moi programiści rutynowo pracują nad wieloma wydaniami naszych produktów. Naszym VCS jest Subversion (wiem, wiem. Próbuję przejść do Git, ale mój nieznośny personel marketingowy jest tak wymagający), a jedno rozwiązanie VS będzie obejmować kilka osobnych projektów. Potrzebowałem moich pracowników, aby mieli wspólną metodę inicjowania środowiska programistycznego bez konieczności instalowania tych samych pakietów Node (przełyk, altanka itp.) Kilka razy na tej samej maszynie.
TL; DR:
Potrzebujesz „npm install”, aby zainstalować globalne środowisko programistyczne Node / Bower, a także wszystkie lokalnie wymagane pakiety dla produktu .NET.
Pakiety globalne powinny być instalowane tylko wtedy, gdy nie zostały jeszcze zainstalowane.
Lokalne linki do globalnych pakietów muszą być tworzone automatycznie.
Rozwiązanie:
Mamy już wspólną platformę programistyczną wspólną dla wszystkich programistów i wszystkich produktów, dlatego stworzyłem skrypt NodeJS, aby w razie potrzeby zainstalować pakiety globalne i utworzyć lokalne łącza. Skrypt znajduje się w „.... \ SharedFiles” względem folderu podstawowego produktu:
Teraz, jeśli chcę zaktualizować globalne narzędzie dla naszych programistów, aktualizuję obiekt „paczki” i sprawdzam nowy skrypt. Moi programiści to sprawdzają i albo uruchamiają go za pomocą „node npm-setup.js” lub „npm install” z dowolnego z opracowywanych produktów, aby zaktualizować środowisko globalne. Całość zajmuje 5 minut.
Ponadto, aby skonfigurować środowisko dla nowego programisty, muszą najpierw zainstalować tylko NodeJS i GIT dla Windows, ponownie uruchomić komputer, przejrzeć folder „Shared Files” oraz wszelkie opracowywane produkty i rozpocząć pracę.
„Package.json” dla produktu .NET wywołuje ten skrypt przed instalacją:
Notatki
Uwaga: odwołanie do skryptu wymaga ukośników nawet w środowisku Windows.
„npm ls” wyświetli „npm ERR! extraneous:” komunikaty dla wszystkich pakietów lokalnie połączonych, ponieważ nie są wymienione w zależnościach „package.json”.
Edytuj 1/29/16
Zaktualizowany
npm-setup.js
skrypt powyżej został zmodyfikowany w następujący sposób:Pakiet „wersja” w
var packages
jest teraz wartością „pakiet” przekazywanąnpm install
w wierszu polecenia. Zostało to zmienione, aby umożliwić instalowanie pakietów z miejsca innego niż zarejestrowane repozytorium.Jeśli pakiet jest już zainstalowany, ale nie jest tym, którego zażądano, istniejący pakiet zostanie usunięty, a poprawny zainstalowany.
Z nieznanych przyczyn npm podczas wykonywania instalacji lub łącza okresowo generuje błąd EBUSY (-4082). Ten błąd jest zatrzymywany, a polecenie wykonywane ponownie. Błąd rzadko zdarza się po raz drugi i wydaje się, że zawsze się usuwa.
źródło
Możesz użyć osobnego pliku, na przykład
npm_globals.txt
, zamiastpackage.json
. Ten plik zawierałby każdy moduł w nowej linii, takiej jak ta,Następnie w linii poleceń uruchom
Sprawdź, czy zostały poprawnie zainstalowane,
Jeśli chodzi o to, czy powinieneś to zrobić, czy nie, myślę, że wszystko zależy od przypadku użycia. W przypadku większości projektów nie jest to konieczne; i bardzo pożądane jest, aby projekt
package.json
zawierał w całość te narzędzia i zależności.Ale obecnie okazuje się, że zawsze instalujęcreate-react-app
globalnie inne CLI, kiedy wskakuję na nową maszynę. Fajnie jest mieć łatwy sposób na zainstalowanie globalnego narzędzia i jego zależności, gdy wersja nie ma większego znaczenia.I obecnie używam
npx
, NPM pakiet biegacz , zamiast instalowania pakietów globalnie.źródło
Wszystkie moduły z pakietu.json są zainstalowane w ./node_modules/
Nie mogłem znaleźć tego wyraźnie zaznaczonego, ale jest to odwołanie do package.json dla NPM .
źródło
Zbuduj własny skrypt, aby zainstalować globalne zależności. To nie zajmuje dużo. Package.json jest dość rozbudowywalny.
Korzystając z powyższego, możesz nawet ustawić go w linii, poniżej!
Spójrz na preinstalację poniżej:
Autorzy węzła nie mogą przyznać pliku package.json jest plikiem projektu. Ale to jest.
źródło