Wspomniałem, że moja aplikacja używa innej wersji NodeJS podczas uruchamiania z sudo
.
$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre
Ta wersja 0.11.8-pre spowodowała pewne problemy, więc zdecydowanie nie chcę jej używać, ale nie mogę jej zmienić na roota.
$ sudo nvm use v0.10.23
sudo: nvm: command not found
Próbowałem zainstalować nvm od użytkownika root, ale pojawił się błąd „NVM już zainstalowany”, ale nadal nie znaleziono nvm podczas uruchamiania z sudo
. Jaki jest mój problem?
sudo -s
a następnie zainstalujnvm
.Odpowiedzi:
Poniższa lista poleceń (źródło: digitalocean ) wydaje się rozwiązywać problem
Powyższe polecenie jest nieco skomplikowane, ale wszystko, co robi, to kopiowanie dowolnej wersji węzła, którą masz aktywną przez nvm do
/usr/local/
katalogu (gdzie zainstalowane przez użytkownika pliki globalne powinny znajdować się na Linux VPS) i ustawianie uprawnień tak, aby wszyscy użytkownicy mieli do nich dostęp .Mam nadzieję że to pomoże!
źródło
chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
Moim rozwiązaniem jest tworzenie dowiązań symbolicznych z wersji
node
inpm
używam do/usr/local/bin
:To udostępnia
npm
inode
udostępnia wszystkim użytkownikom.źródło
npx
dość często. Dodałem więc również:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
babel-node
Twój problem polega na tym, że
nvm
nie ma tego na ścieżce, gdy używaszsudo
.Więc wpisz
a wynik będzie podobny
Spróbuj ponownie teraz z
sudo
:Zakładam, że natrafisz na problem polegający na tym, że użytkownik root nie może znaleźć wersji 0.10.13, ale zobaczmy następny komunikat o błędzie ...
źródło
which nvm
nic niesudo
. Tak, mogę zalogować się jako root i zainstalować nvm, ale w przyszłości nie będę mógł go uruchomićsudo nvm use v0.10.25
. Więc nie mogłem używać równieżsudo node
od użytkownika.which nvm
nigdy nie działa, prawda?nvm
nie jest plikiem wykonywalnym, to funkcja powłoki. github.com/creationix/nvm/issues/540which nvm
tutaj podobne pytanie : stackoverflow.com/questions/49156104/ ... Użyj,type nvm
aby ujawnić jego definicję. Jak powiedział Matt, jest to funkcja powłoki.Podstawowym powodem jest to, że
nvm
nie jest to prawdziwy program. Jest to funkcja, która zostanie załadowana bash w instrukcji.profile
,.bashrc
albo ... Więcsudo
nie jest automatycznie go odebrać od $ PATH jak większość innych programów.Alternatywny menedżer wersji węzła to
n
: https://github.com/tj/n . To jest prawdziwy program, więcsudo
pobierze go za pośrednictwem $ PATH bez żadnych hacków (o ilesudo
ma/usr/local/bin
w swoim $ PATH).źródło
Według README
Potrzebujesz sudo npm?
W moim przypadku potrzebuję
sudo npm run start
dostępu do jakiegoś pliku wymagającego uprawnień administratora. Zgodnie z tym problemem ,W sumie
Opiekun nvm jest przekonany, że nie musimy
sudo
: Pźródło
Ja też miałem twój problem. Wreszcie udało mi się to obejść. Oto moje rozwiązanie:
apt-get purge nodejs
.Po ponownym uruchomieniu terminala możesz uruchomić polecenie
sudo nvm ls
.źródło
źródło
Próbowałem tego samego na moim komputerze, na którym też mam
nvm
i mam trochę inną odpowiedź:Domyślam się, że zainstalowałeś węzeł 0.11 poza nvm. ( Przez menedżera pakietów lub nawet ze źródła )
Dlatego uruchomienie węzła przez sudo spowoduje zamiast tego wybranie tego samodzielnego węzła.
Czy to ma sens, czy się mylę?
źródło
Zainstaluj nvm globalnie z
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash
źródło
| bash
, nie ma nigdzie sudo: nvm-sh / nvm: Node Version ManagerNajłatwiejszym rozwiązaniem tego problemu będzie prawdopodobnie trafienie do pliku wykonywalnego nvm.sh, gdziekolwiek się on znajduje.
To działa dobrze dla mnie (zakładając, że jest to ścieżka instalacji).
Wyglądałaby jak pełna procedura instalacji
A następnie możesz uruchomić powyższe polecenie, aby trafić do nowo zainstalowanego nvm.sh
źródło