node-sass 迁移至 dart-sass 踩坑实录
原文中文,约3700字,阅读约需9分钟。
📝
内容提要
更新项目依赖,弃用已停止维护的node-sass,改用dart-sass以简化安装和提高兼容性。将node.js升级至14版本,保持webpack和sass-loader版本不变,解决sass语法错误并替换不支持的深度选择器。最终更新node、vue-loader和sass版本,确保项目正常运行。
🔎
延伸解读
node-sass与dart-sass的对比
node-sass已停止维护,迁移至dart-sass是为了提高兼容性和简化安装。node-sass在Windows下安装复杂,需依赖Python2和Visual C++,而dart-sass则不需要这些额外依赖,适合现代开发环境。
深度选择器的替换
在迁移过程中,需将不再支持的/deep/选择器替换为::v-deep。虽然::v-deep在Vue的后续RFC中被放弃,但在当前的构建工具链中仍然有效,确保样式正常应用。
版本更新的注意事项
更新node.js和vue-loader时需谨慎,vue-loader v16仅支持Vue 3,若项目仍在使用Vue 2,需确保使用vue-loader v15。同时,webpack的版本更新可能会引发兼容性问题,需仔细测试。
❓
Q&A
为什么要将node-sass替换为dart-sass?
因为node-sass已停止维护,而dart-sass是官方推荐的继任者,能够简化安装并提高兼容性。
在迁移过程中遇到了哪些主要问题?
主要问题包括深度选择器不支持、sass语法错误以及vue-loader版本兼容性问题。
如何解决sass语法错误?
需要根据编译时的报错手动修复不规范的写法,例如多打冒号或未指定数字的选择器。
更新vue-loader的原因是什么?
更新vue-loader至15版本是为了支持::v-deep语法,而vue-loader v16仅支持Vue 3。
如何批量替换不支持的深度选择器?
可以使用sed命令批量将/deep/替换为::v-deep。
更新项目依赖后,node.js的版本如何变化?
node.js版本从^12升级至^14。
🏷️