本文不讨论 nvm 的版本管理和使用。

当有多个前端项目时,每个项目中的package.json中务必写上配置项"engineStrict""engines"。示例:

//package.json
"engineStrict":  true,
"engines":  {
    "node":  "8.10.0"
},

若使用npm install进行安装,目前无法检测上述配置项,即node版本不对也不会提示。若使用yarn则会控制台报 warning。

然而 yarn 也不会自动切node版本,不过nvm提供了稍微便捷一点的方法

  1. nvm use命令会读取.npmrc中的node版本号做切换。
  2. 执行nvm run app.js 也会先读取.npmrc的版本号自动切换。
  3. nvm exec npm install可以代替 npm install,虽然有点长。

可是node版本号为啥要写2遍到2个文件里? 于是一些开发者选择了在package.jsonscript中加入了诸如preinstall的脚本;也有开发者选择全局安装包 比如avn;也有自己写shell脚本做切换。

我也提供一种shell的方案,只在一处配置node版本(package.json);当使用vscode 中的终端时会切换版本号,这对我就足够了。

mac为例,~/.bash_profile加上:

if [ -e "./package.json" ];then
  v=$(grep -E '\"node\"\s*\:\s*\"[^"]+"' package.json -o|grep -E '[0-9|.]+' -o)
  nvm use $v
fi

seasonley
607 声望693 粉丝

一切皆数据