本文不讨论 nvm 的版本管理和使用。
当有多个前端项目时,每个项目中的package.json
中务必写上配置项"engineStrict"
和"engines"
。示例:
//package.json
"engineStrict": true,
"engines": {
"node": "8.10.0"
},
若使用npm install
进行安装,目前无法检测上述配置项,即node版本不对也不会提示。若使用yarn
则会控制台报 warning。
然而 yarn 也不会自动切node版本,不过nvm提供了稍微便捷一点的方法:
-
nvm use
命令会读取.npmrc
中的node版本号做切换。 - 执行
nvm run app.js
也会先读取.npmrc
的版本号自动切换。 -
nvm exec npm install
可以代替 npm install,虽然有点长。
可是node版本号为啥要写2遍到2个文件里? 于是一些开发者选择了在package.json
的script
中加入了诸如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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。