Twitter bootstrap 如何覆盖和引用变量?从LESS迁移到Sass Bootstrap 3及以下版本

Twitter bootstrap 如何覆盖和引用变量?从LESS迁移到Sass Bootstrap 3及以下版本,twitter-bootstrap,bootstrap-4,Twitter Bootstrap,Bootstrap 4,引导程序4与引导程序3相比,在目录/文件结构方面没有改变。 改变的是放弃了LESS预处理器 好吧,我很高兴这个决定,但是Sass和Less在处理变量的方式上有一个巨大的区别 重写和引用引导4 Sass变量 LESS有一种称为惰性变量求值的方法 假设我需要重写bootstrap/scss/_variables.scss中的变量,同时引用其中声明的变量 简单的例子: $mycolor:#f4f9f1; $body bg:$mycolor; $body color:$grey-900; 由于$gr

引导程序4引导程序3相比,在目录/文件结构方面没有改变。 改变的是放弃了LESS预处理器

好吧,我很高兴这个决定,但是Sass和Less在处理变量的方式上有一个巨大的区别


重写和引用引导4 Sass变量 LESS有一种称为惰性变量求值的方法

假设我需要重写
bootstrap/scss/_variables.scss
中的变量,同时引用其中声明的变量

简单的例子:

$mycolor:#f4f9f1;
$body bg:$mycolor;
$body color:$grey-900;
由于
$grey-900
尚不存在,因此无法编译。 它可以通过在我们自己的覆盖中声明
$grey-900
来解决。但这意味着每次更新引导时,我们必须检查常量引导对
grey-900
使用了什么

在v3 LESS实现中,引用
variables.LESS
中的现有变量甚至不是一个问题——因为该变量的计算是惰性的。现在在v4中,为了引用现有变量,必须将整个
\u bootstrap.scss
复制并粘贴到项目目录中:

/\u my-bootstrap.scss
/*
*引导程序v4.0.0-beta.2
*/
@导入“~bootstrap/scss/functions”;
@导入“~bootstrap/scss/variables”;
@导入“自定义变量”;
@导入“~bootstrap/scss/mixin”;
@导入“~bootstrap/scss/root”;
@导入“~bootstrap/scss/print”;
...
这里我们导入所需的
\u函数.scss
\u变量.scss
然后导入我们的
\u自定义变量.scss
,然后导入其余的

缺点很明显——现在在每次更新之后,必须将
\u my-bootstrap.scss
文件与
\u bootstrap.scss
进行比较,并应用差异,因为可选组件可能会被添加/重命名/弃用/删除


解决方案(已拒绝) 我已经提出了一个请求 其想法是将整块
boostrap.scss
拆分为两个独立的样式表--必需的可选的。 不幸的是,@mdo没有解释就拒绝了,IDK为什么拒绝了。马克·奥托是唯一一个做出建筑决策的人吗?IDK

如果要合并PR,用户将能够通过仅包含节点_模块中的两个文件来轻松覆盖变量:

@import“~bootstrap/scss/bootstrap required”;
@导入“自定义变量”;
@导入“~bootstrap/scss/bootstrap可选”;
在一个小项目的情况下——当不需要引用现有变量时——人们总是可以使用老方法,利用
Sass的默认
功能

@import“自定义变量”;
@导入“~bootstrap/scss/bootstrap”;
对于任何类型的项目来说,这都可能是一个双赢的解决方案

在中,必需样式表和可选样式表之间已经有了明确的分离


是否存在另一种解决方案? 也许我是唯一一个需要引用现有变量的人,或者可能存在另一个我不知道的解决方案