【问题标题】:Can't use a variable for importing a less file不能使用变量来导入较少的文件
【发布时间】:2014-04-16 18:35:18
【问题描述】:

不知道这是一个错误还是只是我。我的 main.less 文件中有以下代码:

@import 'settings.less';
@theme_branding: 'themes/blue/branding.less';
@import @theme_branding;

这会在我的终端上输出以下错误(顺便说一下,我正在使用 Grunt)

undefined_methodError: Object #<Object> has no method 'genCSS' in less/main.less on line null, column 0:

如果错误出现在 NULL 行上,则不是很有帮助

但是,我没有使用变量作为导入路径,而是使用了字符串。这工作得很好

@import 'settings.less';
@theme_branding: 'themes/blue/branding.less';
@import 'themes/blue/branding.less';

我已将所有内容都注释掉了。我只导入了没有错误的设置文件以及其他所有内容。就在我尝试@import @var_name 时,它开始给我带来问题。

我做错了吗?我尝试在 less 的网站上使用代码,但仍然遇到问题。

【问题讨论】:

  • @import @theme_branding; 不支持此语法。请改用@import "@{theme_branding}";(请参阅lesscss.org/features/#variables-feature-import-statements)。
  • 我刚刚想通了,但我遇到了另一个问题,我会更新我的问题。
  • @seven-phases-max 我刚刚弄清楚了我遇到问题的原因。我在下面回答了我自己的问题,让我知道它是否有意义,如果没有,我将重写它。

标签: less gruntjs


【解决方案1】:

好吧,显然 less 不会将字符串保存为字符串。以下变量如何显示如下:

@var = 'path/to/file';
@import @var

这相当于

@import path/to/file

根据 css,这不是字符串。变量必须用引号括起来,如下所示:

@var = 'path/to/file';
@import = "@{var}";

这相当于:

@import 'path/to/file';

所以这在我的 main.less 文件中有效,但是从设置文件导入这些变量时遇到了问题。我明白了为什么这对我不起作用。在我的设置文件中,我有类似的内容:

@file: 'file';
@path: 'path/to/@{file}';

然后在我的 main.less 文件中

@import 'settings.less';
@import '@{path}';

这给了我一个错误,但是因为我已经将变量 @path 封装在一个字符串中,现在将它作为一个完整的字符串读取,并且我不必第二次用引号将它括起来。所以这是 main.less 的修复:

@import 'settings.less';
@import @path;

【讨论】:

  • 不是因为“less 不会将字符串保存为字符串”,而是因为 Less 要求 @import 后跟显式字符串,而不是变量或任何其他实体(无论如果变量本身包含字符串)。更少的变量不是宏——它们不会立即扩展为独立于上下文的值。
猜你喜欢
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2020-01-15
  • 2017-03-20
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多