node node-sass sass-loader版本兼容问题
相关概念
sass
Sass是一种预处理器脚本语言,可以解释或编译成层叠样式表(CSS)。
Sass包含两种语法:较旧的语法使用缩进将代码块和换行符分隔为单独的规则;较新的语法SCSS使用像CSS这样的块格式。它使用大括号来表示代码块和分号来分隔块中的行。
缩进语法和SCSS文件传统上分别给出扩展名.sass和.scss
node-sass
Node-sass是一个库,它将Node.js绑定到LibSass(流行样式表预处理器Sass的C版本)。它允许用户以令人难以置信的速度将.scss文件本地编译为css,并通过连接中间件自动编译。
sass-loader
sass-loader 是一个webpack 的loader,用于处理项目中的Sass/SCSS 文件。 它的作用是将Sass/SCSS 代码转换成CSS 代码,并将其注入到应用程序中。
兼容问题
在安装node-sass的过程中,经常会出现兼容问题,导致安装失败,通常是由于node版本、node-sass版本、sass-loader版本不对应导致。
下面是一些推荐的版本对应规则:
首先是node和node-sass的版本对应规则:node-sass - npm
| NodeJS | Supported node-sass version | Node Module |
|---|---|---|
| Node 20 | 9.0+ | 115 |
| Node 19 | 8.0+ | 111 |
| Node 18 | 8.0+ | 108 |
| Node 17 | 7.0+, <8.0 | 102 |
| Node 16 | 6.0+ | 93 |
| Node 15 | 5.0+, <7.0 | 88 |
| Node 14 | 4.14+, <9.0 | 83 |
| Node 13 | 4.13+, <5.0 | 79 |
| Node 12 | 4.12+, <8.0 | 72 |
| Node 11 | 4.10+, <5.0 | 67 |
| Node 10 | 4.9+, <6.0 | 64 |
| Node 8 | 4.5.3+, <5.0 | 57 |
| Node <8 | <5.0 | <57 |
然后是node-sass和sass-loader的对应规则:
sass-loader 4.1.1,node-sass 4.3.0
sass-loader 7.0.3,node-sass 4.7.2
sass-loader 7.3.1,node-sass 4.7.2
sass-loader 7.3.1,node-sass 4.14.1
sass-loader 10.0.1,node-sass 6.0.1
上面是部分对应规则,首先根据node版本确定好node-sass的版本,然后再选择node-sass的版本。
同时上面只是一部分sass-loader的版本对应,因为没有提供官方的对应规则,所以上面的版本还是不对的话,确定好node和node-sass版本之后,可以一个一个尝试sass-loader的版本,所有版本:sass-loader - npm
其它说明
- 出现兼容问题的主要原因在于,早期开发人员使用比如node12版本,安装node-sass4+版本和sass-loader4+,可以正常运行,但是后期开发人员使用了更新的node,比如16,而16不支持低版本node-sass。
- 同时即便切换到低版本node12中可以正常运行,但项目中使用了一些node12以上的代码语法,比如node14才支持的可选链语法,然后其它开发人员拉代码之后,就要么高版本node无法拉取node-sass包,要么切换低版本无法运行一些高版本node才支持的语法。
- 推荐还是使用高版本的node,然后升级node-sass和sass-loader版本。
其它方法
直接放弃node-sass,使用dart-sass无缝替换。
node-sass与dart-sass区别:
- node-sass 是用 node (调用 cpp 编写的 libsass) 来编译 sass。
- dart-sass 是用 drat VM 来编译 sass。
- node-sass 是实时自动编译的,dart-sass 需要保存后才会生效。
- 推荐 dart-sass 性能更好(也是 sass 官方使用的),除了上面的版本对应不上,很多时候node-sass还因为国情问题经常装不上。
下面是切换方法,使用高版本node,然后根据下面操作:
1、卸载 node-sass
npm uninstall node-sass
2、安装 dart sass
npm install sass sass-loader -D
3、将项目中原有的 /deep/ 替换为::v-deep,也就这一步麻烦一些,具体需要个人评估。
node node-sass sass-loader版本兼容问题的更多相关文章
- ubuntu14.0 安装 node v8.11.1(任意版本)
由于众所周知的原因,通过node官网下载速度十分慢,我这里通过淘宝镜像安装 node8.11.1,其他版本同理. node版本淘宝镜像地址:https://npm.taobao.org/mirrors ...
- 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查
事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...
- 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧
转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...
- APP接口版本兼容的问题
现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...
- 移动端版本兼容js
移动端版本兼容js <!--移动端版本兼容 --> <script type="text/javascript"> var phoneWidth = par ...
- robotframework ride 版本兼容问题
在安装robotFramework ride的时候,必须需要使用wxpython 目前使用的wxpython 还必须是unicode 版本的要不然不支持中文 目前使用的 wx.version.2.8. ...
- Realm的一对多配置以及版本兼容
前言:本篇博客将介绍Realm的一些高级用法,基本使用在这里 一.配置一对多关系 // // Teacher.h #import <Realm/Realm.h> #import " ...
- 2018-01-28-TF源码做版本兼容的一个粗暴方法
layout: post title: 2018-01-28-TF源码做版本兼容的一个粗暴方法 key: 20180128 tags: IT AI TF modify_date: 2018-01-28 ...
- Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
extends:http://www.cnblogs.com/tianzhijiexian/p/4087917.html 本文是对API中的方法做了介绍,如果想要看如何让这些方法兼容4.x或2.x可以 ...
- Hadoop生态圈-通过CDH5.15.1部署spark1.6与spark2.3.0的版本兼容运行
Hadoop生态圈-通过CDH5.15.1部署spark1.6与spark2.3.0的版本兼容运行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我的CDH5.15.1集群中,默 ...
随机推荐
- Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发
Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤,易⽤性⾼,如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富,基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能 ...
- TCP连接的关键之谜:揭秘三次握手的必要性
TCP 连接建立 当我们浏览网页.发送电子邮件或者进行在线游戏时,我们常常不会想到背后复杂的网络连接过程.然而,正是这些看似不起眼的步骤,确保了我们与服务器之间的稳定通信.其中最重要的步骤之一就是TC ...
- linux日常维护(二)
linux启动流程 BIOS自检 启动GRUB 2 加载内核 执行systemd进程 初始化系统环境 执行/bin/login程序 (一)BIOS自检 加电POST自检(对硬件进行检测) 进行本地设备 ...
- MySQL的sql_mode设置导致报错1292
在MySQL8.0的一个PXC集群中,默认的sql_mode设置如下: select @@sql_mode; +-------------------------------------------- ...
- Python如何在日志中隐藏明文密码
Python如何在日志中隐藏明文密码 前言 在项目开发中,有的时候会遇到一些安全需求,用以提升程序整体的安全性,提高外来非法攻击的门槛,而在日志中隐藏明文密码打印便是最典型的安全需求之一. 在Pyth ...
- SpringBoot如何缓存方法返回值?
目录 Why? HowDo annotation MethodCache MethodCacheAspect controller SpringCache EnableCaching Cacheabl ...
- python 自动创建Hype-V虚拟机脚本
安装模块 pip install pywinrm 脚本如下 #!/usr/bin/env python3 # coding=utf-8 # author:LJX # describe:一键创建hype ...
- 从零实现的浏览器Web脚本
从零实现的浏览器Web脚本 在之前我们介绍了从零实现Chrome扩展,而实际上浏览器级别的扩展整体架构非常复杂,尽管当前有统一规范但不同浏览器的具体实现不尽相同,并且成为开发者并上架Chrome应用商 ...
- 解决Pycharm运行成功,但无法生成:pytest-html报告
不生成报告的原因: 用户习惯:使用者习惯于单独执行测试文件.py,调试测试用例: 而编辑器为了方便用户执行测试用例,变调用python test来执行测试用例,这种情况下,执行的只是用例或者套件,不是 ...
- 在vue中如何使用echart
1.在前面基础上搭建好vue环境,初始化webpack后,在终端使用npm i echarts -s 下载echart 2.下载完成后全局使用echart 在main.js文件中导入 import e ...