前端开发肯定都会遇到node-sass引起的问题,终于官方推荐使用dart-sass 如何node-sass升级为dart-sass | 8月更文挑战

2,380 阅读2分钟

3.jpg 我们在做前端项目的时候,经常性的会使用css预处理器,比如我们在用vue-cli来构建项目,可选择使用哪种预处理器(Sass/Less/Stylus),目前vue-cli在选择sass预处理的时候也会默认优先使用dart-scss 由于node-sass 底层依赖 libsass 导致很多用户安装的特别的困难,尤其是 windows 用户,它强制用户在windows环境中必须安装python2Visual Studio才能编译成功。 这个问题是真的坑,在开发过程中屡次遇到:cold_sweat:

选择使用dart-sass还有一个更主要的原因,sass官方已经将dart-sass作为未来主要的的开发方向了,有任何新功能它都是会优先支持的,而且它已经在社区里稳定运行了很长的一段时间,基本没有什么坑了。dart-sass之所以容易安装,主要是因为它会被编译成纯 js,这样就可以直接在的 node 环境中使用。虽然这样它的运行速度会比基于 libsass 的慢一些些,但这些速度的差异几乎可以忽略不计。

sass-lang官方网站: sass-lang.com/dart-sass 目前vue-cli在选择sass预处理的时候也会默认优先使用dart-scss ,相关 pr

相同点

都是用来将sass编译成css的工具。

区别

  • node-sass 是用 node(调用 cpp 编写的 libsass)来编译 sass;
  • dart-sass 是用 drat VM 来编译 sass;
  • node-sass是自动编译实时的,dart-sass需要保存后才会生效
  • 推荐 dart-sass 性能更好(也是 sass 官方使用的),而且 node-sass 因为国情问题经常装不上

如何升级

npm uninstall node-sass
npm install sass --save-dev

不兼容

替换 node-sass 之后有一个地方需要注意,就是它不再支持之前 sass 的那种 /deep/ 写法,需要统一改为 ::v-deep 的写法。相关: issue

.a {
  /deep/ {
    .b {
      color: red;
    }
  }
}

/* 修改为 */
.a {
  ::v-deep {
    .b {
      color: red;
    }
  }
}

参考:panjiachen.github.io/vue-element…