Bootstrap LESS: duplicate @imports



我们使用的是bootstrap v3.3.4。

我们的结构将引导程序的所有LESS源文件保存在一个单独的文件夹中,以便于升级。

在编译为styles.css的主styles.less文件中,我们只@import所有的依赖项,包括bootstrap.less

@import "bootstrap/bootstrap.less"; // bootstrap source
@import "variables.less"; // our custom variables
@import "mixins.less"; // our custom mixins
@import "main.less"; // all of our custom css/less styles

我们的自定义variables.less文件导入引导程序的variables.less文件,而自定义mixins.less文件导入引导文件的mixins.less文件。

这意味着在我们的主styles.less中,引导程序的variables.lessmixins.less被导入两次。(一次在bootstrap/bootstrap.less中,另一次在我们的自定义mixins.less/variables.less中)

我们这样做的原因是,我们有其他单独的css文件,这些文件只与styles.css一起包含在一些页面上,并且这些文件是从它们自己的less文件编译而来的,这些文件依赖于bootstrap的自定义变量/mixin和我们的自定义变量/Mixin,这意味着它们需要在这些较少的文件中导入。

因此,这样做要容易得多:

@import "variables.less"; // our custom variables that also @import bootstrap's variables
@import "mixins.less"; // our custom variables that also @import bootstrap's variables

并且不必担心单独导入所有依赖项(引导程序和我们的),因为我们的版本导入引导程序版本。

如果我们试图消除重复进口,它看起来像:

@import "bootstrap/variables.less";
@import "bootstrap/mixins.less";
@import "variables.less";
@import "mixins.less";

我们不仅要导入两倍多的文件,而且还要担心顺序,因为引导文件必须放在第一位。

我的问题是A)以我们的方式行事会因为重复进口而导致问题吗?B)即使不一定会导致问题,这是否违反了任何最佳实践?C)有更好的方法吗?

A)我们的方式会因为重复导入而导致问题吗

首先,答案是否定的。LESS编译器足够聪明,可以关心模块和声明的重复。它能够区分和处理它。

B) 即使它不一定会引起问题,这是否违反了任何最佳实践

当然,除非导入不处理副作用,如果它们只携带不会以任何方式影响任何其他样式的代码,并且如果编译,将生成一个没有声明的CSS。导入两次充满副作用的代码是不好的,不是通过两次代码生成,而是通过良好的实践和易读性。

C) 有没有更好的方法来解决这个问题

是的,您应该知道LESS中的导入在编译时起作用,并且当您只编译主文件时,您将能够从外部源访问变量和mixin。举个例子,让我们看一下:

调色板.less

@defaultColor: navy;
@secondaryColor: black;

无正文定义

body {
background-color: @defaultColor;
border-top: 5px solid @secondaryColor;
}

main.less

@import "palette";
@import "body-def";
html { ...

注意,body-def不导入palette,但它可以像编译main.less一样访问其数据。

A)我们的方式会因为重复导入而导致问题吗

B)即使不一定会引起问题,这是否违反了任何最佳实践

是的。使用CSS预处理器的一种常见方法是让一个文件控制所有内容,这就是styles.less文件。心态应该是对所有人都有一个单一的规则,找到所有人,并将他们放在一起(就进口而言)。因此,如果你导入了两次或两次以上的东西,那么一个文件并不能将它们全部放在一起,也不能找到所有的东西。

C)有更好的方法吗

LESS不像其他面向对象的语言那样工作,在这些语言中,必须导入特定的头才能使用mixin。通过简单地编译styles.less(您的主LESS文件),它将能够自动进入Bootstrap并调用适当的mixin。

有些IDE无法在没有隐式@import的情况下处理来自其他文件的mixin,所以它不会给你提示,但LESS本身可以处理它,没有问题;这就是它的初衷。如果你需要intellisense提示,你可能只需要为IDE找到另一个插件,或者把Bootstrap文档放在你旁边。

您可以采用的一种方法是创建一个可在项目中使用的"common.less"文件。例如:

普通。较少

@import "bootstrap/bootstrap.less"; // bootstrap source
@import "variables.less"; // your custom variables
@import "mixins.less"; // your custom mixins

样式较少

@import "common.less";
// Your common CSS

唯一。较少

@import "common.less"
// Custom CSS per page

使用这种方法,您只需导入一次内容,就不必担心在每个文件中分别管理内容。请确保,您不会在common.less中导入任何实际输出CSS的LESS文件,否则您的CSS文件中会有重复的规则。

最新更新