用nvm管理你的Node環境

帕奇式發表於2022-12-15

當你管理著多個專案時,有沒有遇到以下提示?

Syntax Error: Error: Missing binding D:\works\test-product\node_modules\node-sass\vendor\win32-x64-57\binding.node
Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 8.x

Found bindings for the following environments:
  - Windows 64-bit with Node.js 14.x

This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass` to download the binding for your current environment.

這是在執行程式的時候,本地執行版本與node-sass安裝版本不一致導致的。

有這種情況的朋友,大多數應該都有使用上nvm吧?

沒錯,管理Node版本目前最好的工具就是nvm1

nvm的安裝

官方工具

官網介紹

nvm 是 node.js 的版本管理器,設計為按使用者安裝,並按 shell 呼叫。 nvm 適用於任何符合 POSIX 的 shell(sh、dash、ksh、zsh、bash),特別是在這些平臺上:unix、macOS 和 windows WSL

如果你符合上述環境,就可以透過下面兩步完成安裝:

  1. 直接複製下面的命令到終端執行
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

#or

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

上面命令會下載並執行指令碼,然後將nvm專案下載到~/.nvm目錄下存放。

  1. 將下面程式碼編輯至~/.bash_profile~/.zshrc~/.profile, or ~/.bashrc 其中一個檔案中
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

Window下的選擇

如果你想在windows普通環境下管理你的node版本,可以安裝nvm-windows2

下載雙擊安裝就可以了。

nvm的使用

使用的方式有兩種:

  • 命令直接操作
  • 用於專案

命令直接操作

nvm官方版本命令

# 檢視所有已釋出的node版本
$ nvm ls-remote 
# 只檢視穩定版本
$ nvm ls-remote --lts

# 安裝node版本
$ nvm install 14.7.0 # or 16.3.0, 12.22.1, etc

# 檢視本地安裝的node和當前應用的版本
$ nvm ls

# 應用node版本
$ nvm use 14.7.0

nvm-windows版本的命令

# 檢視所有已釋出的node版本
$ nvm list available

# 安裝node版本
$ nvm install 14.7.0 # or 16.3.0, 12.22.1, etc

# 檢視本地安裝的node和當前應用的版本
$ nvm list

# 應用node版本
$ nvm use 14.7.0

用於專案

像文章開頭遇到的情況,專案在用的node版本存在要求時,有什麼辦法解決呢?

nvm支援讀取.nvmrc檔案進行node版本的切換。

這就是答案。

具體這樣用:

  1. 在專案中建立.nvmrc並將當前版本注入其中。
# nvm
$ node -v >> .nvmrc

# nvm-windows
# 宣告一下:windows下用不帶.exe的會出錯
$ node.exe -v >> .nvmrc

# 檔案結果
$ cat .nvmrc
14.7.0

.nvmrc 將作為專案使用哪個Node版本的重要依據,所以記得提交到git歷史。

  1. 專案執行命令前執行切換node版本

比如vue-cli專案下會有這兩行,一般用於開發調取的,如:本地執行npm run serve

{
    "script": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build"
    }
}

執行時直接切換node版本,只需要增加兩行配置3

{
    "script": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
+        "preserve": "nvm use",
+        "prebuild": "nvm use",
    }
}

如果你在windows的PowerShell下執行命令的,需要改為下面這樣4

{
    "script": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
+        "preserve": "nvm use (Get-Content .nvmrc)",
+        "prebuild": "nvm use (Get-Content .nvmrc)",
    }
}

相關文章