问题
Upon using a new terminal session in OS X, nvm
forgets the node version and defaults to nothing:
$ nvm ls
:
.nvm
v0.11.12
v0.11.13
I have to keep hitting nvm use v.0.11.13
in every session:
.nvm
v0.11.12
-> v0.11.13
I\'ve tried both the brew
install, as well as the official installation script.
My .profile
for the brew version:
#nvm
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
And for the install.sh script:
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash
#nvm
export NVM_DIR=\"/Users/farhad/.nvm\"
[ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\" # This loads nvm
Any clue to what I\'m doing wrong?
回答1:
Try nvm alias default
. For example:
$ nvm alias default 0.12.7
This sets the default node version in your shell. Then verify that the change persists by closing the shell window, opening a new one, then:
node --version
回答2:
Alias to node
itself to avoid updating the default alias along with node version updates later on.
nvm alias default node
回答3:
To install the latest stable version:
nvm install stable
To set default to the stable version (instead of a specific version):
nvm alias default stable
To list installed versions:
nvm list
As of v6.2.0
, it will look something like:
$ nvm list
v4.4.2
-> v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)
回答4:
nvm does its job by changing the PATH variable, so you need to make sure you aren't somehow changing your PATH to something else after sourcing the nvm.sh script.
In my case, nvm.sh was being called in .bashrc but then the PATH variable was getting updated in .bash_profile which caused my session to find the system node before the nvm node.
回答5:
In my case, another program had added PATH
changes to .bashrc
If the other program changed the PATH
after nvm's initialisation, then nvm's PATH
changes would be forgotten, and we would get the system node on our PATH
(or no node).
The solution was to move the nvm setup to the bottom of .bashrc
### BAD .bashrc ###
# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"
Solution:
### GOOD .bashrc ###
# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"
# NVM initialisation
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
(This was with bash 4.2.46 on CentOS. It seems to me like a bug in bash, but I may be mistaken.)
回答6:
The top rated solutions didn't seem to work for me. My solution is below:
- Uninstall nvm completely using homebrew:
brew uninstall nvm
- Reinstall
brew install nvm
In Terminal, follow the steps below(these are also listed when installing nvm via homebrew):
mkdir ~/.nvm cp $(brew --prefix nvm)/nvm-exec ~/.nvm/ export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh
The steps outlined above will add NVM's working directory to your $HOME path, copy nvm-exec to NVM's working directory and add to $HOME/.bashrc, $HOME/.zshrc, or your shell's equivalent configuration file.(again taken from whats listed on an NVM install using homebrew)
回答7:
If you have tried everything still no luck you can try this :_
1 -> Uninstall NVM
rm -rf ~/.nvm
2 -> Remove npm dependencies by following this
3 -> Install NVM
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
4 -> Set ~/.bash_profile
configuration
Run sudo nano ~/.bash_profile
Copy and paste following this
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
5 -> CONTROL + X
save the changes
6 -> Run . ~/.bash_profile
7 -> Now you should have nvm
installed on your machine, to install node run nvm install v7.8.0
this will be default node version or you can install any version of node
回答8:
This question has mentioned for the OSX, but it happened to me in my linux OS.
I tried using nvm alias default <version>
but for each new terminal session the used node version was forgotten.
so, here is the solution that i figured out.
make sure to set a default alias for node version,put the following code in .bashrc, and source .bashrc
.
export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
## Source it
source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH
descriptive solution link
回答9:
run this after you installed any version,
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
This command is copying whatever version of node you have active via nvm into the /usr/local/ directory and setting the permissions so that all users can access them.
回答10:
I have found a new way here. Using n
Interactively Manage Your Node.js helps.
回答11:
Doing nvm install 10.14
, for example, will nvm use
that version for the current shell session but it will not always set it as the default for future sessions as you would expect. The node version you get in a new shell session is determined by nvm alias default
. Confusingly, nvm install
will only set the default alias if it is not already set. To get the expected behaviour, do this:
nvm alias default ''; nvm install 10.14
This will ensure that that version is downloaded, use it for the current session and set it as the default for future sessions.
回答12:
If you also have SDKMAN...
Somehow SDKMAN was conflicting with my NVM. If you're at your wits end with this and still can't figure it out, I just fixed it by ignoring the "THIS MUST BE AT THE END OF THE FILE..." from SDKMAN and putting the NVM lines after it.
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
回答13:
$ nvm alias default {NODE_VERSION}
when we use the above command, only update the node version but the npm
still uses the old version.
Here is another solution for update the both node
and npm
, in my case i want to use node 8.9.4
and i have used the below command.
$ nvm use default 8.9.4
And the command returns the output.
Now using node v8.9.4 (npm v5.6.0)
回答14:
After a long time of conflicting with this issue, I found how to fix it. Here is a step by step solution for the problem:
Open terminal & Install the command line developer tools:
xcode-select --install
Press enter
Install the latest version of NVM:
cd ~/
Press enter
git clone https://github.com/creationix/nvm.git .nvm
- Press enter
In case you already created the .nvm folder before, you'll see the next error message:
fatal: destination path '.nvm' already exists and is not an empty directory.
Else, you'll see the cloning process running until it has done.
Check out the latest NVM version:
cd ~/.nvm
Press enter
git checkout v0.34.0
You'll get a response similar to:
HEAD is now at 3d9c31d v0.34.0
The version might be different on different systems.
ls
Press enter
. nvm.sh
Press enter
nvm list
Press enter
You'll see the different node versions installed on your machine, there might be some errors, don't give them attention.
nvm ls-remote | tail -n9
Press enter
nvm list
Open bash using vim:
vim ~/.bash_profile
Inside the vim editor press:
i
to enterINSERT mode
and start a new line. If you have any mistakes when editing, pressESC
key and then:q!
to exit without saving.export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
Press
ESC
key when you finish editing the file (you'll see the INSERT mode disappears).- Press
:wq
to save the file. Press enter
nvm ls-remote | tail -n9
Press enter and install the newest nvm version presented:
nvm install 12.6.0
When the process finished you'll see:
Now using node v12.6.0 (npm v6.9.0)
You can check if installation succeeds by pressing:
node -v
ornpm -v
, it should show you the versions of both nvm and npm installed on your system.
Based on: How to Install Latest Node Version Manager NVM and Install Node and NPM in macOS Mac OS X
回答15:
Also in case you had node installed before nvm check in your ~/.bash_profile to not have something like :
export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH
If you do have it, comment/remove it and nvm should start handling the default node version.
来源:https://stackoverflow.com/questions/24585261/nvm-keeps-forgetting-node-in-new-terminal-session