序
當你管理著多個專案時,有沒有遇到以下提示?
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
如果你符合上述環境,就可以透過下面兩步完成安裝:
- 直接複製下面的命令到終端執行
$ 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
目錄下存放。
- 將下面程式碼編輯至
~/.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版本的切換。
這就是答案。
具體這樣用:
- 在專案中建立.nvmrc並將當前版本注入其中。
# nvm
$ node -v >> .nvmrc
# nvm-windows
# 宣告一下:windows下用不帶.exe的會出錯
$ node.exe -v >> .nvmrc
# 檔案結果
$ cat .nvmrc
14.7.0
.nvmrc
將作為專案使用哪個Node版本的重要依據,所以記得提交到git歷史。
- 專案執行命令前執行切換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)",
}
}
- nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions (github.com) ↩
- coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go. (github.com) ↩
- doesn't work with .nvmrc · Issue #169 · coreybutler/nvm-windows (github.com) ↩
- Support .nvmrc · Issue #128 · coreybutler/nvm-windows (github.com) ↩