Mac上使用 nvm 管理不同版本的 node

在我們的日常開發(fā)中有沒有遇到這樣的問題: 手上有好幾個項目瓢湃,每個項目依賴不同版的 NodeJS 運行環(huán)境嘶是,又不敢茫然把所有的依賴版本都升級為最新的,那么有沒有這樣一個工具可以分別管理不同版本的node環(huán)境呢锨咙?答案是肯定的裂逐。

nvm 就是為解決這個問題的,nvm 是 Mac 下的 node 管理工具逊桦,有點類似管理 Ruby 的 rvm眨猎。

nvm VS n

node 版本管理工具還有一個是 TJ大神的 n 命令,n 命令是作為一個 node 的模塊而存在强经,而 nvm 是一個獨立于 node/npm 的外部 shell 腳本宵呛,因此 n 命令相比 nvm 更加局限。

由于 npm 安裝的模塊路徑均為 /usr/local/lib/node_modules夕凝,當(dāng)使用 n 切換不同的 node 版本時宝穗,實際上會共用全局的 node/npm 目錄。 因此不能很好的滿足按不同 node 版本使用不同全局 node 模塊的需求码秉。

卸載全局安裝的 node/npm

在官網(wǎng)下載的 node 安裝包逮矛,運行后會自動安裝在全局目錄,使用過程中經(jīng)常會遇到一些權(quán)限問題转砖,所以推薦按照以下方法卸載全局安裝的 node/npm须鼎。

首先,打開你 Finder府蔗,按 shift+command+G晋控,打開前往文件夾的窗口,分別輸入下列目錄進(jìn)去之后刪除 nodenode_modules 相關(guān)的文件和文件夾:

  • 打開 /usr/local/lib姓赤,刪除 nodenode_modules 相關(guān)的文件和文件夾
  • 打開 /usr/local/include赡译,刪除 nodenode_modules 相關(guān)的文件和文件夾
  • 如果你是使用的 brew install node 安裝的 NodeJS,那么你還需要在終端中執(zhí)行 brew uninstall node 命令來卸載
  • 檢查你的個人主文件夾下面的所有的 local不铆、lib 以及 include 文件夾蝌焚,并且刪除所有與 nodenode_modules 相關(guān)的文件以及文件夾
  • 打開 /usr/local/bin 并刪除 node 可執(zhí)行文件

你可能還需要在你的終端中輸入一些額外的指令:

sudo rm /usr/local/bin/npm
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /opt/local/bin/node
sudo rm /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules

安裝

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

或者

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

從遠(yuǎn)程下載 install.sh 腳本并執(zhí)行。注意這個版本年數(shù)字 v0.33.11 會隨著項目開發(fā)而變化誓斥。隨時通過官方最新安裝命令來檢查最新安裝版本是有好處的只洒。

安裝多版本 node/npm

例如,我們要安裝8.12.0版本劳坑,可以用如下命令:

nvm install 8.12.0

nvm 遵守語義化版本命名規(guī)則毕谴。例如,你想安裝最新的 8.12 系列的最新的一個版本的話距芬,可以運行:

nvm install 8.12

nvm 會尋找 8.12.x 中最高的版本來安裝涝开。

你可以通過以下命令來列出遠(yuǎn)程服務(wù)器上所有的可用版本:

nvm ls-remote
image.png

切換不同版本

每當(dāng)我們安裝了一個新版本 Node 后,全局環(huán)境會自動把這個新版本設(shè)置為默認(rèn)蔑穴。

nvm 提供了 nvm use 命令忠寻。這個命令的使用方法和 install 命令類似。

我當(dāng)前版本是6.4.1存和,切換到剛安裝的最新的版本 8.12.0

nvm use 8.12.0

也可以使用以下命令切換到最新版:

nvm use node

每次執(zhí)行切換的時候奕剃,系統(tǒng)都會把 node 的可執(zhí)行文件鏈接放到特定版本的文件上。

我們還可以用 nvm 給不同的版本號設(shè)置別名:

nvm alias Latest-LTS-version 8.12.0

我們給 8.12.0 這個版本號起了一個名字叫做 Latest-LTS-version捐腿,然后我們可以運行:

nvm use Latest-LTS-version

當(dāng)然也可以通過下面這個命令取消別名:

nvm unalias Latest-LTS-version

列出已安裝的node版本

nvm ls
image.png

綠色箭頭是當(dāng)前正在使用的版本

在項目中使用不同版本的 Node

我們可以通過創(chuàng)建項目目錄中的 .nvmrc 文件來指定要使用的 Node 版本纵朋。之后在項目目錄中執(zhí)行 nvm use 即可。.nvmrc 文件內(nèi)容只需要遵守上文提到的語義化版本規(guī)則即可茄袖。另外還有個工具叫做 avn操软,可以自動化這個過程。

在多環(huán)境中宪祥,npm該如何使用呢聂薪?

每個版本的 Node 都會自帶一個不同版本的 npm家乘,可以用 npm -v 來查看 npm 的版本。全局安裝的 npm 包并不會在不同的 Node 環(huán)境中共享藏澳,因為這會引起兼容問題仁锯。它們被放在了不同版本的目錄下,例如 ~/.nvm/versions/node/<version>/lib/node_modules</version> 這樣的目錄

那么問題來了翔悠,我們安裝過的 npm 包业崖,都要重新再裝一次?幸運的是蓄愁,我們有個辦法來解決我們的問題双炕,運行下面這個命令,可以從特定版本導(dǎo)入到我們將要安裝的新版本 Node:
8.12.0

nvm install v7.3.0 --reinstall-packages-from=6.11.0

其他命令

  • 直接運行特定版本的 Node
nvm run 7.3.0 --version
  • 在當(dāng)前終端的子進(jìn)程中運行特定版本的 Node
nvm exec 7.3.0 node --version
  • 確認(rèn)某個版本Node的路徑
nvm which 7.3.0
  • 安裝最新版 Node
nvm install node
  • 安裝最新不穩(wěn)定版本的 Node
nvm install unstable
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撮抓,一起剝皮案震驚了整個濱河市妇斤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胀滚,老刑警劉巖趟济,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咽笼,居然都是意外死亡顷编,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門剑刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媳纬,“玉大人,你說我怎么就攤上這事施掏∨セ荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵七芭,是天一觀的道長素挽。 經(jīng)常有香客問我,道長狸驳,這世上最難降的妖魔是什么预明? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮耙箍,結(jié)果婚禮上撰糠,老公的妹妹穿的比我還像新娘。我一直安慰自己辩昆,他們只是感情好阅酪,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般术辐。 火紅的嫁衣襯著肌膚如雪砚尽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天辉词,我揣著相機與錄音尉辑,去河邊找鬼。 笑死较屿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卓练。 我是一名探鬼主播隘蝎,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼襟企!你這毒婦竟也來了嘱么?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤顽悼,失蹤者是張志新(化名)和其女友劉穎曼振,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔚龙,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡冰评,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了木羹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甲雅。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坑填,靈堂內(nèi)的尸體忽然破棺而出抛人,到底是詐尸還是另有隱情,我是刑警寧澤脐瑰,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布妖枚,位于F島的核電站,受9級特大地震影響苍在,放射性物質(zhì)發(fā)生泄漏绝页。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一忌穿、第九天 我趴在偏房一處隱蔽的房頂上張望抒寂。 院中可真熱鬧,春花似錦掠剑、人聲如沸屈芜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽井佑。三九已至属铁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躬翁,已是汗流浹背焦蘑。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盒发,地道東北人例嘱。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像宁舰,于是被迫代替她去往敵國和親拼卵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容