为啥我会收到语法错误:SassError:预期的“”?
Posted
技术标签:
【中文标题】为啥我会收到语法错误:SassError:预期的“”?【英文标题】:Why do I get a Syntax Error: SassError: expected ""?为什么我会收到语法错误:SassError:预期的“”? 【发布时间】:2021-04-30 20:23:41 【问题描述】:sassmap.set
documentation给出的例子不起作用,这是为什么呢?
@use "sass:map";
$font-weights: (
'regular': 400,
'medium': 500,
'bold': 700
);
map.set($font-weights, 'extra-bold', 900);
// ("regular": 400, "medium": 500, "bold": 700, "extra-bold": 900)
map.set($font-weights, 'bold', 900);
// ("regular": 400, "medium": 500, "bold": 900)
我的sass
版本是1.32.5
。
整个错误信息:
Syntax Error: SassError: expected "".
╷
9 │ map.set($font-weights, 'extra-bold', 900);
│ ^
╵
src\assets\styles\variables.scss 9:42 @import
src\assets\styles\main.scss 4:9 root stylesheet
我希望地图的设置不会引发错误。
【问题讨论】:
【参考方案1】:如果您的代码中仍然出现错误,您可能会犯和我一样愚蠢的错误。
解决方案
只需将返回值分配给某个变量。
说明
map.set
实际上返回了一个更新了值的新地图并且它没有赋值给变量,所以下面的代码会抛出错误SassError: expected "".
:
@using 'sass:map';
$test: (
foo: 23,
bar: ()
);
map.set($test, bar, baz, 5);
...因为在第8行(map.set($test, bar, baz, 5);
)set函数会返回新的map((foo: 23, bar: (baz: 5))
)并且它不是有效的sass语法,所以情况会和你写下面的代码一样:
@using 'sass:map';
$test: (
foo: 23,
bar: ()
);
(foo: 23, bar: (baz: 5));
【讨论】:
【参考方案2】:问题 1(如果您正在使用map.set
,请跳至问题 2)
其实我一直在用map-set
,我以为map-set
和map.set
是一样的,结果不是。
在 Sass 的文档中 Built-In Modules:
在引入 Sass 模块系统之前,所有 Sass 功能始终全局可用。 许多函数仍然有全局别名(这些在其文档中列出)。 Sass 团队不鼓励使用它们,并最终会弃用它们,但目前,它们仍可用于与旧 Sass 版本和 LibSass(尚不支持模块系统)兼容。
并且map.set
没有像map.merge
那样的全局map-set
(map-merge
)。
问题 2
另外,我认为map.set
的行为类似于 javascript 的 Map.prototype.set()
,通过它您可以设置像 map.set(key, value)
这样的映射而不将其分配给变量。在 Sass 中,我必须这样做:
@use "sass:map";
$map: ();
$map: map.set($map, key, value);
为什么 @debug
对我“不起作用”
我主要在vue-cli
环境下使用Sass。 Sass 的 @debug
语法在视觉上“从未有过”任何输出,结果发现它们是实际上输出的,我只需要向上滚动一点:
【讨论】:
以上是关于为啥我会收到语法错误:SassError:预期的“”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”:
为啥我会收到这个语法错误(false syntax error pyflakes)
为啥我会收到此错误:模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):语法错误 Unexpected token, expected "