zoukankan      html  css  js  c++  java
  • node nvm

    nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm,如果是需要管理 Windows 下的 node,官方推荐是使用 nvmw 或 nvm-windows 。

    以下具体说下 Mac 系统中的安装与使用细节(Windows 系统仅供类比参考)。

    一、卸载已安装到全局的 node/npm

    如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中

    node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为 /usr/local/lib/node_modules/npm

    安装 nvm 之后最好先删除下已安装的 node 和全局 node 模块:

    npm ls -g --depth=0 #查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
    
    sudo rm -rf /usr/local/lib/node_modules #删除全局 node_modules 目录
    sudo rm /usr/local/bin/node #删除 node
    cd  /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm #删除全局 node 模块注册的软链

    二、安装 nvm

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

    安装完成后请重新打开终端环境,Mac 下推荐使用 oh-my-zsh 代替默认的 bash shell。

    三、安装切换各版本 node/npm

    nvm install stable #安装最新稳定版 node,现在是 5.0.0
    nvm install 4.2.2 #安装 4.2.2 版本
    nvm install 0.12.7 #安装 0.12.7 版本
    
    # 特别说明:以下模块安装仅供演示说明,并非必须安装模块
    nvm use 0 #切换至 0.12.7 版本
    npm install -g mz-fis #安装 mz-fis 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v0.12.7/lib/mz-fis
    nvm use 4 #切换至 4.2.2 版本
    npm install -g react-native-cli #安装 react-native-cli 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v4.2.2/lib/react-native-cli
    
    nvm alias default 0.12.7 #设置默认 node 版本为 0.12.7

    四、使用 .nvmrc 文件配置项目所使用的 node 版本

    如果你的默认 node 版本(通过 nvm alias 命令设置的)与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc 文件,在文件中指定使用的 node 版本号,例如:

    cd <项目根目录>  #进入项目根目录
    echo 4 > .nvmrc #添加 .nvmrc 文件
    nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
    node -v #查看 node 是否切换为对应版本

    五、nvm 与 n 的区别

    node 版本管理工具还有一个是 TJ 大神的 n 命令,n 命令是作为一个 node 的模块而存在,而 nvm 是一个独立于 node/npm 的外部 shell 脚本,因此 n 命令相比 nvm 更加局限。

    由于 npm 安装的模块路径均为 /usr/local/lib/node_modules ,当使用 n 切换不同的 node 版本时,实际上会共用全局的 node/npm 目录。 因此不能很好的满足『按不同 node 版本使用不同全局 node 模块』的需求。

    因此建议各位尽早开始使用 nvm ,以免出现全局模块无法更新的问题

    目前主流的node版本管理工具有两种,nvm和n。两者差异挺大的,具体分析可以参考一下淘宝FED团队的一篇文章:

    管理 node 版本,选择 nvm 还是 n?

    总的来说,nvm有点类似于 Python 的 virtualenv 或者 Ruby 的 rvm,每个node版本的模块都会被安装在各自版本的沙箱里面(因此切换版本后模块需重新安装),因此考虑到需要时常对node版本进行切换测试兼容性和一些模块对node版本的限制,我选择了使用nvm作为管理工具,下面就来说说nvm的安装和使用过程。

    安装

    一开始,我像往常一样在 oh-my-zsh 中选择了使用 Homebrew 来安装nvm,完成后却发现它被全局安装了,这就造成了后面使用上的一点问题,具体问题可参考 Github 上的一个 issue 。

    然后我就又用 Homebrew 把它给卸掉了,还是决定找找看它的文档, Github 上找到 这里 。

    清楚看到文档中 Installation 那一小节有一句 Homebrew installation is not supported. ,由此可见,没事儿还是要多看看文档。

    正式进入安装过程:

    我选择了使用 curl 来安装:

    url -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash

    完成后nvm就被安装在了 ~/.nvm 下啦,接下来就需要配一下环境变量了,如果你也使用了 zsh 的话,就需要在 ~/.zshrc 这个配置文件中配置,否则就找找看 ~/.bash_profile 或者 ~/.profile 吧。

    打开 ~/.zshrc ,在最后一行加上:

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

    这一步的作用是每次新打开一个bash,nvm都会被自动添加到环境变量中了。

    完成后输入 source ~/.zshrc 重新启动一下配置。

    输入 nvm 可以看到如下信息:

    ➜  ~  nvm
    
    Node Version Manager
    
    Note: <version> refers to any version-like string nvm understands. This includes:
      - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
      - default (built-in) aliases: node, stable, unstable, iojs, system
      - custom aliases you define with `nvm alias foo`
    
    Usage:
      nvm help                                  Show this message
      nvm --version                             Print out the latest released version of nvm
      nvm install [-s] <version>                Download and install a <version>, [-s] from source. Uses .nvmrc if available
        --reinstall-packages-from=<version>     When installing, reinstall packages installed in <node|iojs|node version number>
      nvm uninstall <version>                   Uninstall a version
      nvm use [--silent] <version>              Modify PATH to use <version>. Uses .nvmrc if available
      nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available
      nvm run [--silent] <version> [<args>]     Run `node` on <version> with <args> as arguments. Uses .nvmrc if available
      nvm current                               Display currently activated version
      nvm ls                                    List installed versions
      nvm ls <version>                          List versions matching a given description
      nvm ls-remote                             List remote versions available for install
      nvm version <version>                     Resolve the given description to a single local version
      nvm version-remote <version>              Resolve the given description to a single remote version
      nvm deactivate                            Undo effects of `nvm` on current shell
      nvm alias [<pattern>]                     Show all aliases beginning with <pattern>
      nvm alias <name> <version>                Set an alias named <name> pointing to <version>
      nvm unalias <name>                        Deletes the alias named <name>
      nvm reinstall-packages <version>          Reinstall global `npm` packages contained in <version> to current version
      nvm unload                                Unload `nvm` from shell
      nvm which [<version>]                     Display path to installed node version. Uses .nvmrc if available
    
    Example:
      nvm install v0.10.32                  Install a specific version number
      nvm use 0.10                          Use the latest available 0.10.x release
      nvm run 0.10.32 app.js                Run app.js using node v0.10.32
      nvm exec 0.10.32 node app.js          Run `node app.js` with the PATH pointing to node v0.10.32
      nvm alias default 0.10.32             Set default node version on a shell
    
    Note:
      to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)

    至此,nvm的安装就算是告一段落了,下面我们就来看一下如何使用它来对node版本进行切换使用。

    使用

    其实,上述最后一步打印出的信息已经可以清楚看到nvm的全部命令。

    各项命令的详细用法及含义可参考上文提到的 nvm文档 。

    接下来就轮到安装我们的主角node大哥了。

    首先我们可以使用 nvm ls-remote 看一下node有哪些版本可以安装:

    ➜  ~  nvm ls-remote
                v0.1.14
                v0.1.15
                v0.1.16
                ...

    Note:由于在写文章的时候网络有问题,无法展示所有结果出来,上面代码示意一下,正确情况下会显示非常多版本出来,大家都知道node更新速度非常非常快。

    我常用的node版本是4.1.0,因此首先安装这个版本:

    $ nvm install v4.1.0
    ######################################################################## 100.0%
    
    Now using node v4.1.0

    同时安装一下最新版来测试nvm的版本管理功能:

    $ nvm install v5.5.0
    ######################################################################## 100.0%
    
    Now using node v5.5.0

    使用nvm轻松切换node版本

    在介绍使用方法前,简单说明一下nvm的工作原理:

    按照我上述安装方法的话,nvm会将各个版本的node安装在 ~/.nvm/versions/node 目录下,我们可以打开这个目录看看有些什么东西:

    ➜  ~  ls -a ~/.nvm/versions/node
    .      ..     v4.1.0 v5.5.0

    事实上 v4.1.0 和 v5.5.0 这两个目录分别存放node的binary档,nvm会在 $PATH 前面安插指定版本的目录,透过这种方式在使用node命令时就会用指定版本的node来运行了。

    可以确认实际的 $PATH 看看:

    ➜  ~  echo $PATH
    /Users/***/.nvm/versions/node/v5.5.0/bin:...

    由于刚刚我们通过nvm安装node,会自动把最后安装的版本设为当前使用的版本,因此上述路径结尾会是 .../v5.5.0/bin (还可通过 nvm ls 命令查看当前已安装的所有node版本)。

    接下来我们可以使用 nvm use <version> 切换版本:

    ➜  ~  nvm use v4.1.0
    Now using node v4.1.0 (npm v2.14.3)
    ➜  ~  node -v
    v4.1.0
    ➜  ~  nvm use v5.5.0
    Now using node v5.5.0 (npm v3.3.12)
    ➜  ~  node -v
    v5.5.0

    轻轻松松完成切换!

    不过问题来了,这时如果你新打开一个bash,输入 nvm current 会发现显示为 null ,这是因为使用 nvm use 命令只会在当前bash里生效,重新打开一个bash你会发现 $PATH 的值已经不包含刚才的node目录了,要解决这个问题也很简单,使用 nvm alias default <version> 命令来指定一个默认的node版本就ok了,这里我使用了 v4.1.0 作为默认版本:

    ➜  ~  nvm alias default v4.1.0
    default -> v4.1.0

    此时再打开一个bash输入 nvm current 就会显示为 v4.1.0 了。

    小结

    以上为我在安装nvm的过程中通过各种资料总结出来的一套简单教程,欢迎大家分享交流!

  • 相关阅读:
    Vector成员为指针时要注意的问题
    (转)C++中的static关键字的总结
    (转)内联(inline)函数与虚函数(virtual)的讨论
    基类类型和派生类型之间的转换以及虚函数
    (转) vector的reserve和resize
    关于函数返回值的一些见解
    (转)感受异或的神奇
    一个mysql不解的问题
    获取本机TCP连接状态信息
    (转)socket的SYN_RECV和ESTABLISHED状态
  • 原文地址:https://www.cnblogs.com/hujihon/p/6377558.html
Copyright © 2011-2022 走看看