头图

当你管理着多个项目时,有没有遇到以下提示?

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)",
    }
}

帕奇式
924 声望71 粉丝

设计和管理是毕生的课题👨‍💻