Node多版本管理:nvm解决node-sass兼容问题
背景
一直同时进行Vue2.0项目、React16项目的维护开发,Node版本稳定在v14.17.6
。最近尝试针对蓝鲸监控平台做二次开发,根据README说明安装了pnpm,把Node版本升级到v18.20.2,一顿操作OK了。再回到React16项目开发,遇见了点小问题,配置了NODE_OPTIONS=--openssl-legacy-provider
,也OK了。再回到Vue2.0项目,悲催了。
JS框架 | CSS预处理器 | Node版本 | 结果 |
---|---|---|---|
Vue 2.0 (老项目) | node-sass + sass-loader | v18.20.2 | × |
Vue 2.0 (老项目) | node-sass + sass-loader | v14.17.6 | √ |
React 16.13.1 | less | v18.20.2 | √ |
React 16.13.1 | less | v14.17.6 | √ |
Vue 2.0 (新项目) | postcss-scss | v18.20.2 | √ |
Vue 2.0 (新项目) | postcss-scss | v14.17.6 | × |
Vue2.0老项目
node-sass、sass-loader这对烂兄烂弟完全不兼容,按照node18版本对应关系安装,node-sass根本安装不上:
// npm 安装
npm install node-sass@8.0.0
// cnpm 安装
cnpm install node-sass@8.0.0
// pnpm 安装
pnpm install node-sass@8.0.0
报错主要卡在如下:
Install fail! Error: Unsupported URL Type: npm:string-width@^4.2.0 Error: Unsupported URL Type: npm:string-width@^4.2.0
尝试切到sass + sass-loader
组合,安装没问题,启动错误:
Syntax Error: TypeError: this.getOptions is not a function
经过查阅策略,sass + sass-loader
多版本测试,完全无解。不耻下问:
听人劝,吃饱饭 o(╥﹏╥)o
npm版本问题
nvm-windows.exe
安装过程中,提示目前已经安装了node-v18.20.0是否管理,感觉挺友好,已经自动管理了一个版本。只需再下载一个node-v14.17.6就可以适配当前项目业务。
nvm -v
// 1.1.12
nvm install 14.17.6
nvm ls
// * 18.20.2 (Currently using 64-bit executable)
// 14.17.6
nvm use 14.17.6
npm -v
// npm Error: Cannot find module 'node:path'
// *******************
use 14.17.6
后npm版本还是node-v18.20.2对应的npm-v10.5.0,又尝试安装了node-v16.0.0,切到node-v16.0.0,npm版本还是v10.5.0。
node | npm |
---|---|
v18.20.2 | v10.5.0 |
v14.17.6 | v6.14.15 |
综上测试猜想,安装nvm时虽然管理了之前安装的node-v18.20.2,但是对npm安装目录并没有有效管理,与其修复npm安装目录、环境变量,不如完全清空按照nvm方式重装。
nvm管理
清空Node.js及nvm安装的node.js相关目录
- 在控制面板中卸载掉Node.js(v18.20.2)软件
- 使用
nvm uninstall v18.20.2 / v14.17.6
- 在nvm安装目录中删除掉C:\Users\86187\AppData\Roaming\nvm\v18.20.2
交给nvm管理
nvm ls
// 空
nvm install 18.20.2
nvm install 14.17.6
nvm ls
// 18.20.2
// * 14.17.6 (Currently using 64-bit executable)
nvm use 14.17.6
npm -v
// 6.14.15
nvm use 18.20.2
npm -v
// 10.5.0
设置别名(×)
本来想给nvm管理的node版本设置别名(alias),整的更顺畅简约些,然而nvm安装的这个版本不支持nvm alias
// 只记住大版本号,方便使用
nvm alias v14 14.17.6
nvm alias v18 18.20.2
指令
后记
项目开发中用到的语法和less使用上基本类似,直接用less版本兼容性问题可能会少些
转载自:https://juejin.cn/post/7371997060633526326