nvm
就是和 rvm
一样管理node
版本的 https://github.com/creationix/nvm
同时他也跟 rvm
一样在使用的时候会把选择的版本的 bin
目录塞到 $PATH
的最前面位置,这样同时使用 rvm
和 nvm
就会两边一起抢这个第一位置,nvm
还好,rvm
一旦不在第一位置,每回车一次,他都会报一个 warning, 真是崩溃了。
这里有朋友同时用了这俩么?想求问一下有没有什么解决方案?
UPDATE 刚刚在 rvm 的 IRC 里面反应了一下,mpapis 也觉得没啥办法,最后还是加上 rvm_silence_path_mismatch_check_flag=0 去掉这个 warning 了事。
$PATH
的结果
$PATH
的设置
nvm
的路径是否在最前面都无所谓,因为只用 node.js 才需要它,除非出现重名的可执行命令,否则不会有什么冲突。
rvm
的加载路径搁在最前面就好了。
你的问题是:为什么 nvm
和 rvm
会抢?我不是很理解这是什么意思。也许你把你相关的设置贴出来会更容易帮助我们理解问题发生的背景。
最佳实践原则肯定是在统一的地方设置 $PATH
,而不是把它散落在许许多多配置文件当中。
BTW,rvm
的启动脚本我放在 .zlogin
中,加载的优先级高于 .zshrc
。如果是 bash
,那就是 .bash_profile
> .bashrc
。在 rbenv 的 Github Wiki 里有一篇很棒的文章介绍了它们在不同操作系统环境下加载的优先级顺序,或许会对你有帮助。
#2 楼 @nightire rvm
和 nvm
本身的命令是不会抢的,他们各自的本身的功能运转的还是很好的,但是因为rvm
和nvm
都可以动态选择不同的版本,这才是问题,我在帖子里也说了,是选择的版本的bin
目录的问题。
例如:
rvm use 1.9.3
那么 rvm
会把 <rvm-path>/<ruby-version-path>/bin
给塞到 $PATH
最前面,这样来保证当前的ruby
命令能正确找到你指定的版本。
nvm
其实也是如此。如果在已经用rvm
选择了ruby
版本的情况下,我nvm use 0.10.2
那 node 0.10.2 就会被插在$PATH
最前面,那么rvm
就开始烦了,每回车一下都要 warning 一下。
刚刚在rvm
的 IRC 里面反应了一下,mpapis 也觉得没啥办法,最后还是加上rvm_silence_path_mismatch_check_flag=0
去掉这个 warning 了事。
我怎么记得是 npm……源码安装 node 的时候自带的 npm 好像也有版本控制功能…不过 node 的包大多数时候不跟 gem 似的装在 path 下而是项目目录里………所以这个 nvm 存在的意义只是一个版本选择?
#3 楼 @larryzhao 哦,这才理解你说的。是两个都切换过版本之后 RVM 会报警是吧?
不过你有没有注意我的第一张图,其实最前面的路径不是 RVM,而是我自己定义的 ./bin
,有意思的是 RVM 并不会因为我抢占了它的位置而报警呢。
#5 楼 @cassiuschen node 本身装在项目目录里?8 会吧,你是说 node_modules 么?
对于 node,我连入门者都算不上,如果我错了请果断明说哈
#4 楼 @sanivbyfish 忘了 nvm 是不是 compile 出来的了,不过一旦真的有项目在用 node 开发了,还是有个版本选择为好吧我觉得。还是 node 版本切换比 ruby 简单的多?
我的能和平共处?
~ $ nvm ls
v0.10.17 v0.11.5 v0.11.6 current: v0.10.17 default -> 0.10.17 (-> v0.10.17) ~ $ rvm list
rvm rubies
jruby-1.7.5 [ x86_64 ] mruby-head [ Usage: /Users/leslie/.rvm/rubies/mruby-head/bin/ruby [switches] programfile switches: -b load and execute RiteBinary (mrb) file -c check syntax only -e 'command' one line of script -v print version number, then run in verbose mode --verbose run in verbose mode --version print the version --copyright print the copyright ] rbx-2.0.0 [ x86_64 ] =* ruby-1.9.3-p448 [ x86_64 ] ruby-2.0.0-p247 [ x86_64 ] ruby-head [ x86_64 ]
#7 楼 @larryzhao 这个其实我之前也回答过了,真相在这里:
这是我的 .zlogin
文件的最后一行,它会追加 .zshrc
的 $PATH
设置(因为它最后执行)。
虽然我没有遇到你说的冲突问题,但是我曾经为 ./bin
的问题大伤脑筋,后来还是看了 rbenv 的那篇文档 才解决的。
/Users/leslie/.rvm/gems/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/gems/ruby-1.9.3-p448@global/bin:/Users/leslie/.rvm/rubies/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/bin:/Applications/calibre.app/Contents/MacOS:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Users/leslie/.nvm/v0.10.7/bin: 这个没有什么特别的吧。。。貌似 nvm 没有争抢
@larryzhao 不会,但仍然没有问题
~$ nvm ls
v0.10.17 v0.11.7 current: v0.11.7 default -> 0.10.17 (-> v0.10.17) ~$ ~$ echo $PATH /Users/leslie/.rvm/gems/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/gems/ruby-1.9.3-p448@global/bin:/Users/leslie/.rvm/rubies/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/bin:/Applications/calibre.app/Contents/MacOS:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Users/leslie/.nvm/v0.11.7/bin: ~$ ~$ ~$ nvm use 0.10.17 Now using node v0.10.17 ~$ ~$ ~$ echo $PATH /Users/leslie/.rvm/gems/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/gems/ruby-1.9.3-p448@global/bin:/Users/leslie/.rvm/rubies/ruby-1.9.3-p448/bin:/Users/leslie/.rvm/bin:/Applications/calibre.app/Contents/MacOS:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Users/leslie/.nvm/v0.10.17/bin: ~$
@larryzhao 之前用 rvm 切换版本的时候确实是有问题,不过将 rvm 放到 path 开头之后就没问题了。。。
设置 path 的时候,也没什么特别的呀,
就是 bash_profile 的最后这样写的
[[ -s /Users/leslie/.nvm/nvm.sh ]] && . /Users/leslie/.nvm/nvm.sh # This loads NVM
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*