dart-sass 和 node-sass(记一次线上element-ui中的iconfont显示乱码问题)

2,941 阅读2分钟

最近一个开发上线过程中,有多位同事(产品与测试)反馈线上前端系统中图标‘偶尔’会出现乱码问题。起初我的第一反应是,是不是字体文件有时候没有加载?可能是Nginx的配置问题阻止了字体文件的加载?

     但是如果是Nginx配置问题应该是每次都加载不到字体文件,所以排除。是不是字体文件有时候没有加载?但是通过排查出现乱码的时候字体文件也是加载了,那到底是什么问题呢?

查看打包过后的app.css 文件

image.png

为什么iconfont的content是乱码呢?

查看官网是!

image.png

为什么打包后悔变成乱码呢?查看资料发现可能是dart-sass 和 node-sass的原因

dart-sass 和 node-sass

这两个有啥区别呢?

相同点

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

不同点

  -   node-sass 是用 node(调用 cpp 编写的 libsass)来编译 sass;

      dart-sass 是用 drat VM 来编译 sass;

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

基于 libsass 的 node-sass 将被弃用,官方建议改用 dart-sass

node_modules中的sass中有sass.dart.js文件说明项目就是用dart-sass编译sass的。

image.png

vue-cli 创建项目时会让你选择用dart-sass或者node-sass(目前推荐用dart-sass)。

image.png 那么为什么用不同的编译方式编译element-ui中的iconfont会出现乱码呢?那是因为element-ui是用node-sass编译的,所以用dart-sass去build就出现了乱码了。

如何解决问题

1.npm uninstall sass

2.npm install node-sass -D

build项目后css文件icon的css正常显示

image.png