2013-02-24 15 views
36

Mam problem z instalowaniem globalnych modułów węzłów, a wszystko, co znajduję w Internecie, mówi, że rozwiązaniem jest właśnie dodanie -g. Który nie jest problemem. Uważam, że jest to problem z linkami lub nieprawidłowy katalog.Moduły globalnego węzła nie instalują się poprawnie. Polecenie nie znaleziono

Oto co robię:

$ npm install -g express 
npm http GET https://registry.npmjs.org/express 
npm http 304 https://registry.npmjs.org/express 
npm http GET https://registry.npmjs.org/range-parser/0.0.4 
npm http GET https://registry.npmjs.org/mkdirp/0.3.3 
...downloads correctly 

$ express myapp 
bash: express: command not found 

Jednak kiedy uruchomić bezpośredni adres odnośnika, aby wyrazić to działa:

$ /usr/local/share/npm/bin/express myapp 

    create : myapp 
    create : myapp/package.json 
    create : myapp/app.js 
... Builds app correctly 

Jeżeli moduł jest:

$ which node 
/usr/local/bin/node 
$ node -pe process.execPath 
/usr/local/Cellar/node/0.8.20/bin/node 
$ npm link express 
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express 

W mój .bash_profile Mam:

export PATH=/usr/local/bin:$PATH 
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node 

Czy muszę zmienić środowisko węzłów, aby pobrać poprawny folder? Czy coś nie łączy się poprawnie? Jestem zagubiony.

Dzięki!

Inne Specyfikacja:

$ node --version 
v0.8.20 
$ npm --version 
1.2.11 
$ brew --version 
0.9.4 
OSX Version 10.8.2 
+1

To dlatego, że/usr/local/share/npm/bin/nie znajduje się w $ PATH powłoki. Dlatego powłoka nie może znaleźć słowa "express". –

+1

Dodałem: export PATH =/usr/local/share/npm/bin: $ PATH do mojego .bash_profile i zadziałało. Dzięki! Dodaj odpowiedź, abym mógł ją zaakceptować i przegłosować. –

Odpowiedz

37

Dodaj /usr/local/share/npm/bin aby Twój PATH (na przykład w .bashrc).

Aby uzyskać więcej informacji, zobacz npm help npm:

tryb globalny: npm instaluje pakiety do zainstalowania na prefiks prefiksu/lib/node_modules i pojemniki są zainstalowane w prefix/bin.

Możesz znaleźć prefiks instalacji z npm get prefix lub npm config list | grep prefix.

+0

co zrobić dla non-sudo używając nvm, czy ścieżka nie powinna być '$ HOME/.npm' do .bash_profile lub .bashrc? Używam nvm, więc chcę się upewnić, że nie zawiążę tego problemu. – blamb

-5

Kroki

Po pierwsze, usunąć węzła:

sudo rm -rf /usr/local/lib/node_modules/jitsu 
npm cache clear 
sudo npm install jitsu -g 

drugie, stworzenie .bash_rc:

vi ~/.bash_rc 

Kopiowanie następujące pozycje i wklej do pliku, otwarte w kroku 2:

[[ -s ~/.bashrc ]] && source ~/.bashrc 
export PATH=/usr/local/share/npm/bin:$PATH 

Uruchom Jitsu. Uruchom vi ~/.bash_profile, to co powinieneś zobaczyć:

[[ -s ~/.bashrc ]] && source ~/.bashrc 
export PATH=/usr/local/share/npm/bin:$PATH 

# {{{ 
# Node Completion - Auto-generated, do not touch. 
shopt -s progcomp 
for f in $(command ls ~/.node-completion); do 
    f="$HOME/.node-completion/$f" 
    test -f "$f" && . "$f" 
done 
# }}} 

Znalazłem odpowiedź do usuwania węzła z tego artykułu: JITSU FAILED TO INSTALL OSX [node 0.8.17 and NPM 1.2.0] WTF

50

To może oznaczać, węzeł zainstalować prefiks nie jest to, czego oczekiwać.

Można ustawić go tak:

npm config set prefix /usr/local

następnie spróbuj uruchomić npm install -g ponownie, a to powinno działać na zewnątrz. Pracował dla mnie na mac i roztwór pochodzi z tej strony:

http://webbb.be/blog/command-not-found-node-npm/

EDIT: Zauważ, że ja po prostu natknąłem to ponownie na nowym Macu mam konfigurowania i musiałem zrobić procesu detailed here on stackoverflow.

+3

jesteś człowiekiem ... dziękuję! – Nico

+2

To jest poprawna odpowiedź – naomik

+0

Używam 'nodenv' i jest najprawdopodobniej lepszy sposób rozwiązania tego problemu dla mojej sprawy. Jednak twoje rozwiązanie działało jak szybka i brudna naprawa! Następnie zmieniłem prefiks z powrotem na prefiks 'nodenv' i mogłem uruchomić pakiet ze ścieżki'/usr/local'. Dzięki! –

3

Nie instaluję żadnych rzeczy npm, przez sudo, nigdy! Mam swoje własne powody, ale staram się utrzymywać rzeczy proste i oparte na użytkownikach, ponieważ jest to świat, w którym rozwija się użytkownik, i nie każdy ma dostęp do roota, a root/sudo instalowanie takich rzeczy po prostu wydaje się zaśmiecać rzeczy do rozpoczęcia z. W końcu wszyscy programiści powinni móc wykonywać te instrukcje, nie tylko uprzywilejowani użytkownicy sudo.

Ten szczególny układ jest RHEL7 dostęp przez SSH:

Często trzeba różne wersje węzła, więc używam NVM https://github.com/creationix/nvm

Więc z tym powiedział, mogę pokazać przykład pracy dla -g globalnym instaluje, używając NVM, NPM i ścieżek węzłów nie używających root.

ustaw swój prefiks na .npm-packages, jeśli jeszcze nie jest. (Uwaga, to jest myślnik, a nie podkreślenie)

nvm config ls 
prefix = "/home/<yourusername>/.npm-packages" 

następnie dostosować ~/.bash_profile lub .bashrc jeśli wolisz readup on why and which here, z następującymi informacjami.

#PATH EXPORTS 
NODE_MODULES=$HOME/.npm           
NPM_PACKAGES=$HOME/.npm-packages/bin       
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES   

#NVM ENABLE             
export NVM_DIR="$HOME/.nvm"         
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

To prawie obejmuje wszystkie ścieżki. Na przykład, jeśli zainstalujesz takie dudy, to npm install -g gulp, to dowiązanie symboliczne w ~/.npm-packages/bin (zauważ, że jest to łącznik, a nie podkreślenie). (nie ma potrzeby, aby gulp-cli lub)

Możesz prawie zastąpić/komentarz-wszystkie inne eksportowanie ścieżek węzłów. Możesz umieścić tę informację o ścieżce pod dowolnymi innymi informacjami o ścieżce, które już masz, bezpiecznie, bez nadpisywania tych informacji.

Powiązane problemy