一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
背景
将公司内部一项目集成到发布平台,原本以为是一把简简单单的“接入局”,但在这过程中,属实让我体验了一把什么叫反复折磨。
运行环境:windows
开搞
step1
第一步自然是先把项目跑起来了,因为有 package-lock.json 随随便便跑个 npm i,意想不到的画面出现了,提示我安装失败,就这样色(shai)儿↓↓↓
npm 不行,那我换 yarn
没啥区别。。。
一眼就揪出了 node-sass 这个毒瘤,一搜,原来是本地的 node 版本太高了,16.14.1版本,而项目中 node-sass: ^4.13.0。
这边就引出了第一个知识点:node-sass sass-loader node,这是“三角恋”关系,也就是安装 node-sass 对 node 版本有要求,安装 sass-loader 对 node-sass 版本有要求。
eg: 下面是 node-sass 对 node 的版本要求,具体可上 GitHub 上查看
问题找到了,要么降低 node 版本,要么升 node-sass 版本。第一个方案还得下安装包,那么麻烦,那我肯定选择升级版本啊。
安装完最新版 node-sass sass-loader,心想这次可以了吧。一般这么说的,结局都是。。。
呵呵,this.getOptions is not a function 是什么鬼啊,一搜,好家伙,sass-loader 版本太高。
其中调整版本的过程在这边就略过了,结果是一直不行。
那我又不想去下 node 14 的安装包,而且要是 14 还不行,那不是又得下其他版本的,直接裂开。
这边就引入了第二个知识点:nvm,node 版本管理工具。
备注:
-
nvm-noinstall.zip :绿色免安装版,但使用时需进行配置。
-
nvm-setup.zip :安装版,推荐使用
安装完看看命令,具体用法这边就不再赘述了,网上一堆。
使用命令安装下所需版本(14.19.1),执行 nvm use 14.19.1 ,然后就出现了
再执行 nvm current
Is kiu s mi?文档晃我?
经查原来是需要 以管理员身份运行命令。
这边有个小tip:vscode 可在属性里设置 以管理员身份运行
切换至 14.19.1 版本之后,再安装依赖就很顺利了,打包一下,也没有问题,上神盾局
补充:
nvm 下载某些 node包之后,可能会遇到
这个问题主要是因为 npm 仓库做了调整,但是 nvm 并没有跟上调整,具体的可参考这篇文章,考虑到时间关系,我也没去实践一下
step2
构建不出意外还是出现了意外,是这样的↓↓↓
具体原因是这样的:www.codenong.com/47354850/
然后我又尝试了 postinstall preinstall 、构建的 hooks 等方法,无果~
step3
难道要前功尽弃?消灭毒瘤的最好办法就是根除它!
方案:使用 dart-sass 替代 node-sass (注:网上常说的 dart-sass 即 sass 包)
话不多说,先 remove 掉 node-sass sass-loader,然后 yarn add sass sass-loader -D
结果就很舒畅了,将 node 版本调至 16 版本,也能正常跑通~
这就是第三个知识点:可用 dart-sass 代替 node-sass,之后哪位小伙伴要是碰到 node-sass 的棘手问题,可以考虑下这个方案~
总结
三个知识点:
- 安装
node-sass对node版本有要求,安装sass-loader对node-sass版本有要求。 nvm,node版本管理工具- 可用
dart-sass代替node-sass
我果然是个辣鸡
PS: 学识有限,文章中如有表述错误或不足,欢迎在评论区讨论~🚀