<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>预处理器 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8/</link><description>Recent content in 预处理器 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 18 Nov 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>预处理器</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/</guid><description>&lt;h3 id="前言"&gt;前言&lt;/h3&gt;
&lt;p&gt;花样不断的前端，貌似多技术方案并行，已经成了家常便饭。&lt;/p&gt;
&lt;p&gt;从大的框架开始，已经分裂react与vue派系。两者思维上虽然有相互不断的借鉴，但在大的方向思维上却是截然不同。而在react与vue的竞争以及相互较量的过程中，往往把其他的对手都干倒了，现在市场angular，jQuery等都逐步没落。&lt;/p&gt;
&lt;p&gt;预编译css也同样，曾经也有多个派系。而后在sass与less的不断竞争中，stylus等其他的编译器也逐步退出市场。本文的重点，对比预编译css，scss与less对比。&lt;/p&gt;
&lt;h3 id="基本介绍"&gt;基本介绍&lt;/h3&gt;
&lt;p&gt;先一起看看官方是如何定义或者介绍他们。&lt;/p&gt;
&lt;h4 id="sass"&gt;Sass&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sass是一种基于Ruby的CSS预处理器，它可以扩展CSS语言，并添加许多其他功能，如变量、嵌套规则、Mixin、函数等。Sass文件以“.scss”扩展名保存，与标准CSS文件兼容，并且可以使用普通CSS代码和语法。Sass也有一个较早的语法格式，以“.sass”扩展名保存，使用缩进的语法来代替括号和分号，但它现在已经不那么流行了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;sass是&lt;strong&gt;第一个&lt;/strong&gt;流行的CSS预处理器，在2006年产生，这也为后续他用户量第一埋下伏笔。&lt;/p&gt;
&lt;h4 id="scss"&gt;Scss&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scss也是一种基于Ruby的CSS预处理器，它与Sass有很多相似之处，但是它的语法更接近标准CSS，使用花括号和分号。它是一种非常流行的CSS预处理器，与Sass相比，它更容易学习和使用，并且与现有的CSS代码更兼容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scss是Sass的一种语法格式，由2007推出。这还要从sass的规范语法说起，最典型的就是Sass使用缩进来表示代码块。这使部分使用者比较别扭。而产生了Scss，基于花括号和分号的CSS语法格式，使得它更易于阅读和理解。随着时间的推移，Scss逐渐取代了Sass作为Sass的主要语法格式。&lt;/p&gt;
&lt;h4 id="less"&gt;Less&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Less是一种基于JavaScript的CSS预处理器，它与Sass和Scss有很多相似之处，但它使用类似CSS的语法，并且更容易学习和使用。Less支持变量、Mixin、嵌套规则等功能，并且可以在客户端和服务器端使用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Less由2009推出，也是提供了一套完整的生态链。它的语法跟sass不同。Less的学习成本更低，更容易理解和编写。此外，Less的编译速度比Sass更快。&lt;/p&gt;
&lt;h4 id="stylus"&gt;Stylus&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stylus是一种基于JavaScript的CSS预处理器，它与Less、Sass和Scss有很多相似之处，但它的语法非常灵活，可以自由选择使用缩进或花括号来表示嵌套和块。Stylus还支持变量、Mixin、函数等功能，并且具有非常强大的插件系统，可以轻松地扩展其功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stylus也是曾经一个比较完善的预编译语言。 但市场份额却原来越少。个人的观点，一是的学习成本高一些，有入门的门槛。而是生态链的问题，sass跟less的有较完善的生态链，而Stylus更像一个独立的东西。&lt;/p&gt;
&lt;h4 id="postcss"&gt;PostCSS&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PostCSS不是一种独立的CSS预处理器，而是一个CSS处理工具集合，可以通过各种插件扩展其功能。PostCSS可以用于转换CSS语法、提供自动前缀、压缩CSS代码、处理嵌套规则、优化图片等。它不像其他预处理器那样提供自己的语言，而是基于现有的CSS语法。使用PostCSS可以通过插件来实现更多的自定义和灵活性，使其成为一个强大的CSS处理工具。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;跟上述的其他的处理器不同，PostCSS不应该算是一个预处理器，但却是我们做适配，压缩等处理时的一个选择。&lt;/p&gt;
&lt;h3 id="数据分析"&gt;数据分析&lt;/h3&gt;
&lt;h4 id="市场占有率分析"&gt;市场占有率分析&lt;/h4&gt;
&lt;p&gt;我们借助npm官网统计工具对比，查看less与scss的数据量对比：&lt;/p&gt;
&lt;p&gt;链接： &lt;a href="https://npm-stat.com/charts.html?package=less"&gt;npm-stat.com/charts.html…&lt;/a&gt; &lt;a href="https://npm-stat.com/charts.html?package=sass"&gt;npm-stat.com/charts.html…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;如上图，左侧为less的数据，右侧为scss的数据。&lt;/p&gt;
&lt;p&gt;我们可以通过统计清晰的看到。单单一个sass的下载量，基本达到less的两倍以上。此处还不包含sass阵营的其他工具，包括node-scss，dart-scss的下载量。&lt;/p&gt;
&lt;p&gt;可以得出结论：&lt;strong&gt;sass的使用量约为less的几倍&lt;/strong&gt;。（但此处有个值得一提的地方：统计为全球的用户量的统计，并非针对国内）&lt;/p&gt;
&lt;h4 id="组件库选择分析"&gt;组件库选择分析&lt;/h4&gt;
&lt;p&gt;从上述的数据中，我们了解到sass的使用量较多，但是国内出名的组件库，却是less居多。毕竟组件库，也代表我们的使用习惯之一。我们一起看看组件库的选择。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ant design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="https://www.antdv.com/docs/vue/customize-theme-cn"&gt;www.antdv.com/docs/vue/cu…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-02.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;element&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了scss，地址：&lt;a href="https://element.eleme.io/#/zh-CN/component/custom-theme"&gt;element.eleme.io/#/zh-CN/com…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-03.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;varlet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="https://varlet.gitee.io/varlet-ui/#/zh-CN/migrationGuide"&gt;varlet.gitee.io/varlet-ui/#…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-04.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="http://vant-contrib.gitee.io/vant/v3/#/zh-CN/theme"&gt;vant-contrib.gitee.io/vant/v3/#/z…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-05.webp"&gt;&lt;/p&gt;
&lt;p&gt;结论：关于组件库的选择，Less还是占大多数，当然Scss也是部分组件库的选择。&lt;/p&gt;
&lt;h3 id="个人分析"&gt;个人分析&lt;/h3&gt;
&lt;h4 id="相同点"&gt;相同点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;都属于css语法编译的工具。&lt;/li&gt;
&lt;li&gt;工具提供的方法也很多雷同。如都支持嵌套，都支持混合器（Mixin），都支持扩展（Extend），都支持颜色函数，都支持变量等等。&lt;/li&gt;
&lt;li&gt;生态链都一致丰富，常用构建工具都基本支持，如webpack，vite, rollup等。&lt;/li&gt;
&lt;li&gt;社区支持都强，提供了大量的插件、工具和资源，可以帮助开发者更好地使用Sass。&lt;/li&gt;
&lt;li&gt;目的性也一致，都提高了CSS编写的效率和可维护性而产生。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="不同点"&gt;不同点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;部分语法不同，如Sass 和 SCSS 中的变量使用 &lt;code&gt;$&lt;/code&gt; 符号进行定义和引用，而不是 Less 中使用的 &lt;code&gt;@&lt;/code&gt; 符号&lt;/li&gt;
&lt;li&gt;Sass 和 Scss 还提供了一些 Less 没有的特性，例如控制流语句和继承等。&lt;/li&gt;
&lt;li&gt;Sass 和 Scss 是基于Ruby或者Dart，Node的预处理器，他需要借助机器安装这些环境来支持。而Less, 是基于JavaScript的CSS预处理器，引入一段JS即可编译，有浏览器还是服务端，他都能编译。&lt;/li&gt;
&lt;li&gt;虽然都有强大的社区，生态链。但总体还是Scss更丰富一些。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="特性分析"&gt;特性分析&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Node-Sass 在国内有一定的兼容性问题，但是基于Dart 语言编写的 Dart Sass以及解决了这个问题。还在使用Node-Sass的建议切换Dart Sass。&lt;/li&gt;
&lt;li&gt;Less 的语法相对于 Sass 更加简洁，易于学习和理解。这使得 Less 在国内开发者中更受欢迎，尤其是对于那些不太熟悉预处理器语言的开发者来说。&lt;/li&gt;
&lt;li&gt;Sass的阵营更丰富，使用量更高一些，市场份额也更加稳定。除了发家早，这也得益于生态圈，例如 Bootstrap、Foundation、Bulma、Vue.js 等，都在曾经的版本自带了Sass。&lt;/li&gt;
&lt;li&gt;国内组件库，还是Less居多，很多&amp;quot;高级前端&amp;quot;， 都觉得less 一直都比 sass 要稳定。至少不会出现Node版本，Python版本不一致等问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="结语"&gt;结语&lt;/h3&gt;
&lt;p&gt;所以Sass与Less谁更强？估计短期还是分不出成败。&lt;/p&gt;</description></item></channel></rss>