nvm 方式安裝nodejs

 

nvm

  • 是什麼
    nvm是一個開源的 Node 版本管理器,經過簡單的 bash 腳原本管理、切換多個 Node.js 版本,使用 nvm 能夠安裝官網最新版本以前的任意版本,能夠任意切換不一樣版本
  • 如何使用 nvm 安裝 node
  • 首先咱們須要安裝 nvm
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
  • 接下來查看一下 node 有哪些版本能夠安裝
$ nvm ls-remote

         v6.1.0  
         v6.2.0  
         v6.2.1  
         v6.2.2  
         v6.3.0  
         ....
  • 下載所須要的 node 版本,好比說咱們須要 v6.3.0 版本
$ nvm install v6.3.0
  • **查看安裝版本和使用 node 的方法 和 apt-get 相同,這裏再也不復述 **
  • 使用 nvm 切換 node 版本
  • 查看當前已安裝版本
$ nvm ls
 ->       v6.3.0  
default -> v6.3.0
node -> stable (-> v6.3.0) (default)
stable -> 6.3 (-> v6.3.0) (default)
iojs -> N/A (default)
lts/* -> lts/argon (-> N/A)
lts/argon -> v4.6.0 (-> N/A)

從運行結果能夠看出,當前電腦上的 node 版本只有一個 v6.3.0,而且當前正在使用的版本也是 v6.3.0,默認的版本一樣也是 v6.3.0前端

  • 例如要使用 v4.4.5 版本,首先安裝該版本(能夠先使用 nvm ls-remote 查看全部版本)
$ nvm install v4.4.5
  • 使用 use 命令切換至該版本
$ nvm use v4.4.5
Now using node v4.4.5 (npm v2.15.5)
  • 設置默認版本
$ nvm alias default v6.3.0

若是沒有設置 default 默認開機 node 是沒有啓動的,因此可能會報找不到 node 命令的錯誤,所以咱們須要設置默認版本node

  • 卸載某個 node 版本,例如卸載 v4.4.5 版本
$ nvm uninstall v4.4.5

輕輕鬆鬆完成切換!git

不過問題來了,這時若是你新打開一個bash,輸入nvm current會發現顯示爲null,這是由於使用nvm use命令只會在當前bash裏生效,從新打開一個bash你會發現$PATH的值已經不包含剛纔的node目錄了,要解決這個問題也很簡單,使用nvm alias default <version>命令來指定一個默認的node版本就ok了,這裏我使用了v4.1.0做爲默認版本:github

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

 

我的建議

  • 我的平時使用 node 時,習慣使用 node 命令,畢竟少輸個 「js」,節省時間
  • 安裝 node 時,node 各個版本特性不一樣,對於 Node.js 這個版本帝而言,不少項目須要使用不一樣版本的 node 開發機器上可能要同時存在幾個 Node.js 的大版本,因此建議你們使用 nvm 方式安裝 node

 

 

 

 
  • nvm
    能夠供咱們選擇要安裝的版本,而且則解決了多版本共存、切換問題,但在安裝以前,請確認本機之前的安裝包已經被卸載npm

  • 安裝目錄(終端經過 whereis node 查看)數組

  • nvmbash

/home/xxx/.nvm/versions/node/v6.3.0/bin/node

nvm 使用 node 切換版本內部實現原理

實現原理:在一個目錄下存放多個版本的目錄,在切換時候將相應的版本路徑加入 PATH 中,從而實現版本的切換,例如從 v6.3.0 切換到 v4.4.5 具體流程以下:app

  • 查看一下當前使用的 node 版本
$ node --version
  v6.3.0
  • 如今來看一下 node 環境變量
$ echo $PATH    
/home/guoru/.nvm/versions/node/v6.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

經過環境變量咱們能夠看出,如今使用的 node 版本是 v6.3.0curl

  • 使用 nvm use v4.4.5 切換版本,而且查看環境變量
$ nvm use v4.4.5
Now using node v4.4.5 (npm v2.15.5)
$ echo $PATH    
/home/guoru/.nvm/versions/node/v4.4.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

能夠看出環境變量已經將 PATH 路徑中的版本改成 v4.4.5版本了ide

總結

若是您是一個前端開發人員,建議您使用 nvm 來安裝 node,若是您是一個普通的用戶,建議您使用 apt-get 安裝 node 。

** 若是您還有興趣,請繼續閱讀 **
啓動 node 時內部實現過程

在命令行啓動 node 程序時,傳入參數,node 程序根據輸入的命令參數,執行相應的處理流程。即:在 node 程序中會使用process.argv獲取命令行輸入參數。Process.argv是一個數組,用於存放從命令行傳入的參數。其相似C語言 main 函數中的char* argv[],假定咱們在控制檯輸入 node argument.js –r arguments.js. 那麼程序argument.js 啓動後, process.argv 數組中就就存儲瞭如下幾個字符串信息:process.argv[0] = 「node」, process.argv [1]= 「argument.js」, process.argv [2] = 「-r」,process.argv[3] = 「argument.js」. 因爲參數數組的前兩個存儲的是字符串 」node」 和源代碼文件名,要想得到有效的輸入參數,咱們通常會從process.argv[2] 開始處理。

var args = {  
 '-h': displayHelp,  
 '-r': readFile  
};  
function displayHelp() {  
    console.log('Argument processor:', args);  
}  
function readFile(file) {  
    if (file && file.length) {  
       console.log('Reading:' ,file);  
       console.time('read');  
       var stream = require('fs').createReadStream(file);  
  
       stream.on('end', function() {  
          console.timeEnd('read');  
       });  
       stream.pipe(process.stdout);  
    }  
    else {  
        console.error('A file must be provided with the -r option');  
        process.exit(1);  
    }  
  }  
  
    if (process.argv.length > 0) {  
  
        process.argv.forEach(function(arg, index) {  
            if (arg === '-r' || arg === '-h') {                    
              console.log(process.argv.slice(index + 1));           
              args[arg].apply(this, process.argv.slice(index+1));  
            }  
        });  
    }

args 對象存儲了對應參數要執行的對應函數,例如輸入參數是 -r 那麼執行 readFile函數, 若是輸入參數-h則執行displayHelp函數。readFile 函數被調用時,傳入的參數是要讀取的文件名。經過 Node 的文件系統模塊fs所提供的接口調用createReadStream, 將指定文件名的文件內容讀入造成輸入流對象,而後再經過輸入流對象的pipe函數,將輸入流中的全部數據內容,重定向到標準輸出,其實也就是輸出到控制檯

做者:半生不熟_ 連接:https://www.jianshu.com/p/72b5df9ef345 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。 做者:半生不熟_ 連接:https://www.jianshu.com/p/72b5df9ef345 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索