序
当你管理着多个项目时,有没有遇到以下提示?
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) ↩