nvm
能夠安裝官網最新版本以前的任意版本,能夠任意切換不一樣版本$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
$ nvm ls-remote v6.1.0 v6.2.0 v6.2.1 v6.2.2 v6.3.0 ....
v6.3.0
版本$ nvm install v6.3.0
apt-get
相同,這裏再也不復述 **$ 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
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
nvm
能夠供咱們選擇要安裝的版本,而且則解決了多版本共存、切換問題,但在安裝以前,請確認本機之前的安裝包已經被卸載npm
安裝目錄(終端經過 whereis node
查看)數組
nvmbash
/home/xxx/.nvm/versions/node/v6.3.0/bin/node
實現原理:在一個目錄下存放多個版本的目錄,在切換時候將相應的版本路徑加入 PATH 中,從而實現版本的切換,例如從 v6.3.0
切換到 v4.4.5
具體流程以下:app
$ node --version v6.3.0
$ 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.0
curl
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 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。