【问题标题】:Can't get dotLESS @import working无法让 dotLESS @import 工作
【发布时间】:2018-06-14 11:08:26
【问题描述】:

我正在努力使用 dotLESS @import 来拥有一个单独的变量文件;我只是经常得到“变量未定义”。

如果我浏览到变量配置文件,它就可以工作;如果我将变量内联在主样式表中,它就可以工作;但在@import 中,没有骰子。我正在将 .css 和 .less 映射到扩展名,但是如果我只使用 .less 它也不起作用。

变量文件LESS-config.less是:

/*
  .LESS VARIABLES
*/
@mbw_dark_cyan: #1293b5;
@mbw_cyan: #11add4;
@mbw_magenta: #e935da;

@control_text: #ffffff;

@action_delete: #ff5400;

@section_level1_bg: @mbw_dark_cyan;
@section_level1_fg: @control_text;

@button_bg: @mbw_dark_cyan;
@button_fg: @control_text;
@button_icon: @control_text;

@data_table_header: @mbw_cyan;

.dummy {
    color: @control_text;
}

呈现为:

/*
  .LESS VARIABLES
*/
.dummy {
  color: #ffffff;
}

调用样式表main.css是:

@import (less) '/css/LESS-config';

button {
    background: @button_bg;
}

这给出了错误:

variable @button_bg is undefined on line 4 in file '/css/main.css':
  [3]: button {
  [4]:     background: @button_bg;
       ----------------^
  [5]: }

正如我所说,如果我用复制和粘贴的相同变量替换导入,一切正常。

我已经尝试在另一个答案中不使用 BOM 进行保存,但这没有帮助。

编辑,我试过了:

  • 删除(少)
  • 改为双引号
  • 使用相对路径LESS-config,而不是上面的虚拟绝对路径
  • logger="dotless.Core.Loggers.AspResponseLogger" log="debug" 添加到 web.configcache已经是false
  • 添加debug="1"
  • 添加 debug="true"

行为完全没有变化。

编辑2:

我创建了一个只包含 import 语句的精简 css;当我浏览它时,导入的样式就在那里。但是,在刷新时,我只得到一个空白响应。

所以这似乎与我的 IIS 配置/缓存有关?我已经关闭了内容压缩,但没有任何乐趣;禁用 .less 和 .css 的所有输出缓存,仍然没有乐趣!

FIXED 根据 Toni 的评论; https://stackoverflow.com/a/51754771/318411:

结果证明这是一个 dotLESS 问题,在 GitHub 上进行了跟踪:https://github.com/dotless/dotless/issues/553

完整的解决方法是:

  1. 将 dotLESS 升级到 1.6.7 版
  2. 由于Method not found error,将Microsoft.Extensions.DependencyInjection 降级到1.1.1.0
  3. 将导入的文件扩展名从.css更改为.less

现在一切正常。

【问题讨论】:

  • 您的@import 语句的语法是否正确?我不认识(less) 粒子,而且我只见过它与双引号一起使用...从the Less.js site 给出的语法为@import "@{themes}/tidal-wave.less";
  • 另外,您的路径是否正确?你确定/css 在你的文件系统的根目录中吗?
  • 我会检查报价,ta! “文件系统的根”是什么意思 - /css 是网站的虚拟根 - 对吗?
  • 更改了引号并丢失了(less),仍然没有喜悦:(
  • 只是猜测:请注意您的主文件实际上是一个 CSS 文件 (main.css),严格来说它不应该处理任何 Less 导入或变量。从技术上讲,您应该在@import (less) 或至少在@button_bg 得到错误(两者在CSS 文件中都是无效的)。换句话说,这可能只是您的设置中的一些怪癖(dotless 必须 处理 *.css 文件根本)。

标签: css .net iis less dotless


【解决方案1】:

请尝试版本1.6.7,它修复了导入仅在第一个请求时执行的错误。

【讨论】:

    【解决方案2】:

    我可能发现您有两个问题。

    1. 您正试图在 css 文件中调用 @import (less)。这是 less 框架特有的语法。
    2. 您的 main.css 不是一个 less 文件。

    将您的 main.css 更改为 main.less 文件,现在尝试从 main.less 作为根文件生成您的 css。 假设 LESS-config.less 的导入网址是正确的。 上面提到的更正应该可以解决问题。

    【讨论】:

    • 我会尝试一下,以防万一,但无点处理程序映射到.css 文件以及.less。 CSS 文件肯定会被解析为 LESS,因为如果不导入变量,它们就会在其中起作用;只有导入不起作用 - 你也看到我的 EDIT 2 关于它的工作一次吗?
    • @Whelkaholism dotless 处理程序映射到 .css 文件以及 .less 这就是我们建议的问题根源。 IE。 dotless 将您的 css 处理(尝试)作为较少的文件,但由于一些内部怪癖/错误,它无法按预期那样做所有事情(例如导入)。变量或任何其他功能(即使是 100 个中的 99 个)以这种方式工作的事实并不意味着什么。
    • "只有导入不起作用" 这是因为,您正在尝试将 less 文件导入 css 文件。我不认为那是可能的。我不认为无点解析器可以那样解析它。而不是调用您的 main.css 文件。只需将其重命名为 main.less。从 main.less 文件调用相同的代码应该可以正常工作。
    • 对,有道理。我今天下午会回到那个项目并试一试。
    • 恐怕这不会改变任何事情。同样,当我第一次导航到页面时它可以工作,但随后所有刷新都失败了。这一定是 IIS 正在做的事情,缓存,压缩 - 不知道是什么,我已经禁用了所有我找不到的缓存和压缩选项:(
    【解决方案3】:

    @import (less, optional) "mystyle.css";Less 语法,您不能在 CSS (Less @import Rules) 中使用它。

    如果你想在你的CSS中使用@import,它应该遵循这个语法(See here

    @import url|string list-of-mediaqueries;
    

    但是,无论如何,您都不能在 CSS 中导入 Less 文件。


    我会这样做的方式:

    假设您有 3 个 .less 文件:config.less、color.less、header.less

    我会创建一个 style.less 文件,其内容如下:

    /*------------------------------------------------------------------------------*/
                                       style.less
    /*------------------------------------------------------------------------------*/
    
    /* 01. config */
    @import "config.less";
    
    /* 02. color */
    @import "color.less";
    
    /* 03. header */
    @import "header.less";
    

    然后我会编译 style.less 这会产生 style.css 并且我会在我的网站中包含 style.css

    【讨论】:

    • 我没有预编译;我正在使用处理程序。它是一个不断开发的内网应用程序,因此处理程序的便利性远远超过预编译的任何速度优势。
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2020-02-23
    • 2014-12-26
    • 2017-12-22
    • 2012-02-28
    相关资源
    最近更新 更多