Jestem bardziej ostrożny niż zwykle, ponieważ byłem zdezorientowany zachowaniem npm
w przeszłości.
Jestem na komputerze Mac i zainstalowałem node.js za pośrednictwem brew install node
.
Teraz, gdy chcę uruchomić jslint.js
w wierszu poleceń jako polecenie jslint
, stwierdzam, że kanonicznym sposobem na osiągnięcie tego jest sudo npm install -g jslint
pomyślne uruchomienie z tym wyjściem:
$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)
Następnie
$ jslint ply.js
zsh: command not found: jslint
z powodu /usr/local/share/npm/bin
braku w moim $PATH
.
1) Dlaczego brew
nie zainstalowano globalnej npm
bin
ścieżki dostępu? Może tak, ale coś zsh
go psuje. Gdzie mogę to znaleźć?
2) Czy mam to zrobić? (Dołącz :/usr/local/share/npm/bin
do wyeksportowanego $PATH
na dole mojego ~/.zshrc
)
Wygląda na to, że nie jest to właściwy sposób, aby to zrobić, ponieważ jeśli później zainstaluję coś innego (używając Homebrew lub czegoś podobnego), będę musiał dołączyć to do mojego skryptu startowego zsh, aby ustawić ścieżkę. Wydaje mi się, że w tym konkretnym przypadku chodzi tylko o to, aby npm install -g
nie tworzyć właściwych linków symbolicznych w „właściwej” lokalizacji (jak /usr/local/bin
może).
Myślę, że to, co zrobię, to ręcznie zbuduję dowiązania symboliczne /usr/local/bin
do wszelkich programów, z którymi mam problem i powinno to wystarczyć do moich celów.
EDYCJA : Aktualizuję to w 2019 roku, ponieważ to stare pytanie jest popularne, ale teraz jest przestarzałe zarówno pod względem mojego osobistego przepływu pracy, jak i pod względem tego, jak najlepiej zająć się instalacją węzła i zarządzaniem różnymi jego zależnościami.
Mój osobisty przepływ pracy polega teraz na użyciu instalatora uzyskanego z nodejs.org do zainstalowania węzła w systemach. W rzeczywistości ufam temu bardziej niż samemu pakietowi homebrew, ponieważ najlepiej wie, jak zarządzać plikami. Jeśli chcesz zmienić węzeł systemowy z 8.10 na 10.15, czy to w systemie Mac, czy Windows, po prostu pobierz instalator z nodejs.org dla 10.15 dla swojego systemu operacyjnego. Z mojego doświadczenia wynika, że próba uaktualnienia węzła zainstalowanego za pośrednictwem homebrew zawsze okazała się trudniejszym podejściem.
Ponadto, najważniejszą rzeczą, na którą należy zwrócić uwagę, jest to, że korzystanie z sudo, jak pokazano w mojej instalacji npm przykładu jslint powyżej, jest wysoce odradzane; Jestem prawie pewien, że pakiety homebrew nigdy nie powinny być instalowane ani w jakikolwiek sposób współpracujące przy użyciu superużytkownika. Nie powinno to być konieczne i doprowadzi do bólu głowy związanego z uprawnieniami do plików!
Ponadto polecam ESLint zamiast jslint i nie używałem jslint od lat.
Odpowiedzi:
Przedłużenie
PATH
o:to nie jest straszny pomysł. Powiedziawszy to, nie powinieneś tego robić.
Uruchom to:
Wartość domyślna na OS X to
/usr/local
, co oznacza, że npm będzie umieszczać pliki binarne z dowiązaniami symbolicznymi do/usr/local/bin
, które powinny już znajdować się na twoimPATH
(szczególnie jeśli używasz Homebrew).Więc:
npm config set prefix /usr/local
jeśli to coś innego, isudo
z npm! Zgodnie z dokumentacją jslint , powinieneś być w stanie tonpm install
zrobić.Jeśli zainstalowałeś npm jako sudo (
sudo brew install
), spróbuj ponownie zainstalować go za pomocą zwykłego ol 'brew install
. Homebrew ma pomóc Ci zachowaćsudo
wolność.źródło
npm
odmawia jednak instalacji najslint
całym świecie.npm install -g jslint
zawodzi.Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
chown
/usr/local
jeśli chcę, aby jakiekolwiek skrypty zapisywały w nim linki bez wymaganiasudo
? Co powiesz na wykonanie tego, aby ustawić nom / node w~/.local
czy coś?root
w moim katalogu~/
(przezsudo rm -r
ontmp/
i a.npm/
), a następnienpm install -g jslint
działało pięknie. To fajne, że sam npm jest programem węzłowym i jest dla mnie trochę dowodem koncepcji wiersza poleceń JS, co zaczynam doceniać teraz, gdy rozumiem to nieco lepiej.chown
-ing/usr/local
i wszystko to jest standardową praktyką na OS X. Zobacz stronę rozwiązywania problemów na wiki Homebrew.chown
ing/usr/local
już nastąpiło na moim komputerze, w przeciwnym razienpm
et al niesudo
byłby w stanie zdeponować linków w/usr/local/bin/
itp.Spędziłem trochę czasu nad tym problemem, a przełącznik PATH nie pomagał. Moim problemem był błąd Homebrew / node / npm znaleziony tutaj - https://github.com/npm/npm/issues/3794
Jeśli masz już zainstalowany węzeł przy użyciu Homebrew, spróbuj **** Uwaga na komentarze, że może to nie być bezpieczne. U mnie to zadziałało, ale mogło mieć niezamierzone konsekwencje. Wydaje się również, że najnowsza wersja Homebrew poprawnie instaluje npm. Więc prawdopodobne, że chciałbym spróbować
brew update
,brew doctor
,brew upgrade node
etc przed próbą ****:Lub, jeśli chcesz zainstalować węzeł z Homebrew i mieć pracę npm, użyj:
źródło
Używam naparu, a prefiks był już ustawiony na:
Zauważyłem, że foldery bin i lib były własnością roota, co uniemożliwiło zwykłą instalację bez sudo, więc ponownie posiadałem je użytkownikowi
Następnie właśnie dodałem ścieżkę do mojego .bash_profile, który znajduje się w / Users / [user]
źródło
brew nie powinien wymagać używania sudo, nawet jeśli uruchomisz npm z -g. W rzeczywistości może to spowodować więcej problemów w przyszłości.
Zwykle brew lub port pozwalają ci zaktualizować ścieżkę, więc nie ryzykujesz zepsucia twojego .zshrc, .bashrc, .cshrc lub innego rodzaju używanej powłoki.
źródło
sudo
. Używałem sudo nanpm
(ponieważ coś, co przeczytałem, kazało mi). Ciekaw jestem, gdzie sprawdzić, jak wytyczona jest ścieżka. Wygląda na to, żezsh
instalator uruchamia coś, co kończy się na twardym zakodowaniu ścieżki (w momencie instalacjizsh
) do.zshrc
której nie lubię tak bardzonpm
powinno zostać zainstalowane w/usr/local
. Przestrzeń/usr
nazw ścieżki jest zarezerwowana dla oficjalnych pakietów twojej dystrybucji./usr/local/bin
w twojej $ PATH czy nie, jest problem zsh.Udało mi się naprawić błąd polecenia Vue Cli, wykonując następujące czynności:
sudo nano ~/.bash_profile
aby edytować swój profil bash.export PATH=$PATH:/Users/[your username]/.npm-packages/bin
vue create my-project
ivue --version
itp.Zrobiłem to po zainstalowaniu najnowszego Vue Cli z https://cli.vuejs.org/
Generalnie używam przędzy, ale zainstalowałem ją globalnie za pomocą npm
npm install -g @vue/cli
. Możesz też użyć przędzy, jeśli chceszyarn global add @vue/cli
Uwaga: może być konieczne najpierw odinstalowanie go globalnie, jeśli masz już zainstalowany:
npm uninstall -g vue-cli
Mam nadzieję że to pomoże!
źródło
Każdy ma ten sam problem, który jest związany z konfliktem między piwem a npm Sprawdź to rozwiązanie https://gist.github.com/DanHerbert/9520689
źródło
Spróbuj biegać:
a następnie wykonaj test, uruchamiając
express
w wierszu poleceń. To zadziałało dla mnie.źródło
~/.npm/bin
czy coś takiego. nie powinno byćnpm
dodanego katalogu do twojego domowego reż.Jeśli połączyłeś pakiety węzłów za pomocą polecenia sudo
Następnie przejdź do folderu, w którym moduły node_modules są zainstalowane globalnie.
W systemach uniksowych są one zwykle umieszczane w / usr / local / lib / node lub / usr / local / lib / node_modules, gdy są instalowane globalnie. Jeśli ustawisz zmienną środowiskową NODE_PATH na tę ścieżkę, moduły można znaleźć według węzła.
Windows XP -% USERPROFILE% \ Application Data \ npm \ node_modules Windows 7 -% AppData% \ npm \ node_modules
a następnie uruchom polecenie
Spowoduje to wyświetlenie listy wszystkich globalnych modułów node_modules i będzie można łatwo zobaczyć połączone moduły węzłów.
źródło
sudo brew nie jest już opcją, więc jeśli zainstalujesz z brew w tym momencie, otrzymasz 2 naprawdę nieprzyjemne rzeczy: O: lubi instalować w
/usr/local/opts
/ usr / local / shared. Na początku nie jest to wielka sprawa, ale miałem problemy z węzłem PATH, zwłaszcza gdy zainstalowałem lint. B: utkniesz z poleceniami sudo, dopóki nie odinstalujesz i nie zainstalujesz go w ten sposób lub nie możesz pobrać stosu z BitnamiPolecam tę metodę zamiast opcji stosu, ponieważ jest gotowa do użycia, jeśli masz wiele projektów. Jeśli pójdziesz z gotowym stosem MEAN, będziesz musiał skonfigurować wirtualne hosty w httpd.conf (bardziej uciążliwe w tym stosie niż XAMPP), a następnie zaktualizuj swoje dodatkowe / vhosts.conf i / etc / hosts dla każdego dodatkowego projekt, chyba że chcesz ponownie wskazać i zrestartować serwer po zakończeniu aktualizacji.
źródło
Proste rozwiązanie to ...
Po prostu wpisz poniższe polecenie:
sudo npm config get prefix
jeśli to nie jest coś takiego
/usr/local
, musisz to naprawić za pomocą poniższego polecenia.sudo npm config set prefix /usr/local
...Teraz w 100% działa dobrze
źródło