其他 有人同时用 rvm 和 nvm 么?

larryzhao · 2013年10月15日 · 最后由 xds2000 回复于 2013年10月16日 · 6090 次阅读

nvm 就是和 rvm 一样管理node版本的 https://github.com/creationix/nvm

同时他也跟 rvm 一样在使用的时候会把选择的版本的 bin 目录塞到 $PATH 的最前面位置,这样同时使用 rvmnvm 就会两边一起抢这个第一位置,nvm 还好,rvm 一旦不在第一位置,每回车一次,他都会报一个 warning, 真是崩溃了。

这里有朋友同时用了这俩么?想求问一下有没有什么解决方案?

UPDATE 刚刚在 rvm 的 IRC 里面反应了一下,mpapis 也觉得没啥办法,最后还是加上 rvm_silence_path_mismatch_check_flag=0 去掉这个 warning 了事。

所以要用虚拟机嘛

$PATH 的结果

$PATH 的设置

nvm 的路径是否在最前面都无所谓,因为只用 node.js 才需要它,除非出现重名的可执行命令,否则不会有什么冲突。

rvm 的加载路径搁在最前面就好了。

你的问题是:为什么 nvmrvm 会抢?我不是很理解这是什么意思。也许你把你相关的设置贴出来会更容易帮助我们理解问题发生的背景。

最佳实践原则肯定是在统一的地方设置 $PATH,而不是把它散落在许许多多配置文件当中。

BTW,rvm 的启动脚本我放在 .zlogin 中,加载的优先级高于 .zshrc。如果是 bash,那就是 .bash_profile > .bashrc。在 rbenv 的 Github Wiki 里有一篇很棒的文章介绍了它们在不同操作系统环境下加载的优先级顺序,或许会对你有帮助。

#2 楼 @nightire rvmnvm 本身的命令是不会抢的,他们各自的本身的功能运转的还是很好的,但是因为rvmnvm都可以动态选择不同的版本,这才是问题,我在帖子里也说了,是选择的版本的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 了事。

没用 nvm,直接下在源码编译最好

我怎么记得是 npm……源码安装 node 的时候自带的 npm 好像也有版本控制功能…不过 node 的包大多数时候不跟 gem 似的装在 path 下而是项目目录里………所以这个 nvm 存在的意义只是一个版本选择?

#3 楼 @larryzhao 哦,这才理解你说的。是两个都切换过版本之后 RVM 会报警是吧?

不过你有没有注意我的第一张图,其实最前面的路径不是 RVM,而是我自己定义的 ./bin,有意思的是 RVM 并不会因为我抢占了它的位置而报警呢。

#6 楼 @nightire 你说了我才注意到,这很有意思,为什么你 use 一个 ruby 之后,还能是 ./bin 能继续保持在第一位呢

#5 楼 @cassiuschen node 本身装在项目目录里?8 会吧,你是说 node_modules 么?

对于 node,我连入门者都算不上,如果我错了请果断明说哈

#4 楼 @sanivbyfish 忘了 nvm 是不是 compile 出来的了,不过一旦真的有项目在用 node 开发了,还是有个版本选择为好吧我觉得。还是 node 版本切换比 ruby 简单的多?

#9 楼 @larryzhao 感觉比 ruby 简单,我没记错的话我 mac 好像是用 brew 装的

#8 楼 @larryzhao 至少比如啥 npm install express 之类的都是直接装在项目里,而不是 path 下

我的能和平共处?

~ $ 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 ]

=> - current

=* - current && default

* - default

#11 楼 @cassiuschen 你说的是包,他说的是 node 版本切换,有差别的。

#7 楼 @larryzhao 这个其实我之前也回答过了,真相在这里:

这是我的 .zlogin 文件的最后一行,它会追加 .zshrc$PATH 设置(因为它最后执行)。

虽然我没有遇到你说的冲突问题,但是我曾经为 ./bin 的问题大伤脑筋,后来还是看了 rbenv 的那篇文档 才解决的。

#14 楼 @nightire .zlogin是在你 login 的时候执行一次么?

#11 楼 @cassiuschen 对啊你说的那些是 node_modules, 你没搞清楚我在问什么

#12 楼 @googya 好神奇啊, 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.7/bin: 这个没有什么特别的吧。。。貌似 nvm 没有争抢

#18 楼 @googya 这个情况是 ok 的,因为第一位是 rvm 的,然后 nvm 是不会出 warning,这时候你如果 use 一个别的 node,再 echo $PATH 呢?node 被选中的 version 的 bin 目录会跑到 $PATH 前面去么?

@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: ~$

#21 楼 @googya 对,这个就是我最想要的,我希望 nvm 的 node path 是放在 $PATH 后面的位置而不是每次都往最前面插,可以在这个 issue 里看到我也是这么提的。但是每次 nvm use 的话,他就会把路径放到最前面,issue 里的回答也是这样说的,所以我很好奇你这个是怎么做到的呀?

@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*

nodejs 一直用 brew 来管理,用最新的。chruby 来管理 ruby 多个版本。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号